Rails,如何限制嵌套资源计数?

时间:2011-09-08 19:24:35

标签: ruby-on-rails ruby-on-rails-3

给出类似的东西:

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

class ItemOption&lt;的ActiveRecord :: Base的   belongs_to:item

如果项目已经有10个或更多项目选项,我该怎么做才能添加ItemOption?

accepts_nested_attributes_for似乎仅在创建项目时有效,并且在您稍后尝试添加ItemOptions时不生效。

由于

2 个答案:

答案 0 :(得分:0)

rails api说的是:limit选项:

“允许您指定可以使用嵌套属性处理的关联记录的最大数量。如果嵌套属性数组的大小超过指定的限制,则引发NestedAttributes :: TooManyRecords异常。如果省略,则为任何数字可以处理关联。请注意:limit选项仅适用于一对多关联。“

如果您想要完全符合:limit选项的行为,您可以在模型中编写类似的函数:

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

答案 1 :(得分:-1)

accepts_nested_attributes_for仅在创建项目时有效。我假设您在创建项目时有一个嵌套表单也接受ItemOptions?

要处理你想要添加ItemOptions的情况,我认为你应该使用之前的过滤器。

在ItemOption模型中有类似的东西计算有多少并返回false(这将取消创建)。

before_create :check_option_count

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