2013-01-16 68 views
1

我有兩個相關的模型:Group和Member。如何在rails中限制模型的嵌套屬性數

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 

我想要做的就是儘快將其阻止添加成員審定MEMBERS_COUNT達到25

所以,如果我編輯組,讓我們說,例如:

  1. 我有20名現有成員
  2. 我在瀏覽器端增加從FORM 8名成員

它應該保存前5條記錄,然後引發一個錯誤,例如「您已超出嵌套屬性的限制」。

是否有任何內置方法在軌道中這樣做。作爲一個比較新手的鐵軌,我不知道這一點?

+0

類似的問題:http://stackoverflow.com/questions/7863618/rails-3-1-limit- user-created-objects – siekfried

回答

8

在你的模型:

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 
這裏
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

+0

這是答案的最佳方法,因爲它不僅檢查當前請求的嵌套屬性,還檢查模型的現有嵌套屬性。 –

5

您是否嘗試過在嵌套屬性限制選項?

accepts_nested_attributes_for :field, limit: 10 

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