2012-04-09 91 views
1

我遇到问题验证与茧和模型允许的字段数。使用cocoon,rails3,我有一个嵌套表单,我的位置有很多链接。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个链接并保存,则会出现错误。也不错。

问题是,当我尝试并删除链接 - 它似乎链接只保存(我认为)后删除。如果我因此删除所有字段,我仍然收到错误。

有什么建议吗?有另一种验证方法吗?

回答

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 
+0

太棒了,那很容易。将不得不阅读marked_for_destruction S. – simonmorley 2012-04-09 22:30:31