2011-09-08 48 views
0

鑑於這樣的:Rails,如何限制嵌套的資源數量?

class Item < ActiveRecord::Base 
    accepts_nested_attributes_for :item_options, :limit => 10, :reject_if => lambda { |a| a[:title].blank? }, :allow_destroy => true 

類ItemOption <的ActiveRecord :: Base的 belongs_to的:項目

我怎樣才能使這樣的ItemOption不能,如果已經有10個或更多的項目選項添加一個物品?

acceptable_nested_attributes_for似乎只在創建項目時才起作用,並且稍後嘗試添加ItemOptions時不起作用。

謝謝

回答

-1

accept_nested_attributes_for僅在創建項目時才起作用。我假設你創建一個項目時,你有一個也接受ItemOptions的嵌套表單?

要處理您想要添加ItemOptions的情況,我認爲您應該使用before過濾器。

在ItemOption模型中有這樣的事情,它計數有多少,並返回false(這將取消創建)。

before_create :check_option_count 

def check_option_count 
    if self.item.options.count > 10 return false 
end 
0

軌道API說,有關:限制選項:

「允許您指定的可與嵌套的屬性來處理相關的最大記錄數如果嵌套屬性的大小數組超過了指定的限制,將引發NestedAttributes :: TooManyRecords異常,如果省略,則可以處理任何數字關聯請注意:limit選項僅適用於一對多關聯。

如果你想的完全行爲:限制選項,你可以寫這樣的模型中的一個功能:

def item_options_attributes= items_options_hash 
    raise NestedAttributes::TooManyRecords if item_options.size + items_options_hash.size > 10 
    super 
end