Rails3 Cocoon验证嵌套字段计数

时间:2012-04-09 22:06:22

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

我遇到了使用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个链接并保存,我会收到错误消息。也很好。

问题是当我尝试删除链接时 - 看起来链接只在保存后删除(我认为)。如果我因此删除所有字段,我仍然会收到错误。

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

1 个答案:

答案 0 :(得分: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