3

我有两个相关的模型:组和成员。

组.rb:

has_many :members, :dependent => :destroy
accepts_nested_attributes_for :members, :reject_if => lambda { |a| a[:email].blank? and a[:id].blank? }, :allow_destroy => true

我想要做的是添加一个验证,以防止在 members_count 达到 25 时立即添加成员。

因此,如果我编辑一个组,例如:

  1. 我有 20 个现有成员
  2. 我在浏览器端添加了 8 个来自 FORM 的成员

它应该保存前 5 条记录,然后引发错误,例如“您已超出嵌套属性的限制”。

rails 中是否有任何内置方法可以执行此操作。作为一个相对新手,我不知道这一点?

4

3 回答 3

11

在您的模型中:

accepts_nested_attributes_for :field, limit: 10

在您的保存方法中:

def update
  begin
    # normal model update
    if Model.update_attributes(params[:your_model])
      flash[:notice] = 'Save success'
    else
      flash[:error] = 'Save error'
    end
  rescue ActiveRecord::NestedAttributes::TooManyRecords
    flash[:error] = 'Too many records'
  end
end
于 2013-10-01T08:34:16.827 回答
6

我也不知道任何内置方法。不过,您可以添加自己的验证例程。

validate :member_limit

def member_limit
  errors.add(:base, "You sir, have too many members!") if members.count > 25
end

这会给基础模型增加一个错误。我认为您还可以将错误添加到 25 以上的关联中members.errors.add(:base, "Sorry, no room for you.")

这是阅读更多内容的指南:

http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations

于 2013-01-16T19:09:00.907 回答
6

您是否尝试过对嵌套属性使用限制选项?

    accepts_nested_attributes_for :field, limit: 10

您可以限制可以创建多少个嵌套关联。

于 2013-02-06T02:52:57.913 回答