1

我在验证 cocoon 和模型允许的字段数时遇到问题。使用 cocoon、rails3,我有一个嵌套表单,我的位置有很多链接。

我需要将每个位置的链接数限制为 5。

在我的 location.rb 模型中,我有这个:

 class Location < ActiveRecord::Base

   has_many :links
   accepts_nested_attributes_for :links, :reject_if => lambda { |a| a[:link_name].blank? }, :allow_destroy => true   
   validate :check_link_count

   ...

   def check_link_count
      if self.links.count > 5
        self.errors.add :base, "No more than 5 links allowed."
      end
   end

   ...

最多添加5个链接,一切正常。

如果我添加 6 个链接并保存,我会收到错误消息。也很好。

问题是当我尝试删除链接时 - 似乎链接仅在保存后才被删除(我认为)。如果我因此删除所有字段,我仍然会收到错误消息。

有什么建议么?有没有其他方法可以验证?

4

1 回答 1

3

嗯。你可以试试这样的

 def check_link_count
    if self.links.reject(&:marked_for_destruction?).count > 5
      self.errors.add :base, "No more than 5 links allowed."
    end
 end
于 2012-04-09T22:23:25.937 回答