簡體   English   中英

如何在rails中限制模型的嵌套屬性數

[英]How to limit number of nested attributes for a model in rails

我有兩個相關的模型:Group和Member。

Group.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

我想要做的是添加一個驗證,以防止member_count達到25后立即添加成員。

因此,如果我編輯一個組,請舉例說:

  1. 我有20個現有成員
  2. 我在瀏覽器端添加了8個來自FORM的成員

它應保存前5個記錄,然后引發錯誤,例如“您已超出嵌套屬性的限制”。

在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

這會給基本模型增加一個錯誤。 我認為您還可以使用members.errors.add(:base, "Sorry, no room for you.")來為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

您可以限制可以創建多少嵌套關聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM