如何在rails中限制模型的嵌套属性的数量



我有两个相关的模型:Group和Member。

。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. 我在浏览器端从FORM中添加了8个成员

它应该保存前5条记录,然后引发一个错误,如"您已经超过了嵌套属性的限制"。

是否有任何内置的方法在rails中做到这一点。作为rails的新手,我没有意识到这一点。

在你的模型中:

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

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

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

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

    accepts_nested_attributes_for :field, limit: 10

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

相关内容

  • 没有找到相关文章

最新更新