2011-01-20 71 views
1

我与后续的代码一个Rails应用程序:删除回形针附件,除非它是最后一个

class Rig < ActiveRecord::Base 
    has_many :rig_pictures, :dependent => :destroy 

    accepts_nested_attributes_for :rig_pictures, 
           :allow_destroy => true, 
           #we reject blank pictures unless they have to be deleted 
           :reject_if => lambda { |a| a['picture'].blank? && !a['_destroy'] } 

    validate :has_beween_1_and_x_pictures 
private 

    def has_beween_1_and_x_pictures 
    errors.add_to_base("must not have more than 8 pictures") if rig_pictures.size > 8 
    errors.add_to_base("must have at least 1 picture") if rig_pictures.size < 1 
    end 
end 

我的问题是“必须至少有1张”验证。如果用户处于编辑窗体并删除了他的所有图片,验证将不会失败,因为此时它不知道要删除它。

所以我的问题是:我如何确保验证只考虑真实图片而不是我想要删除的图片?

Thx。

回答

1

也许你可以尝试RidPicture模型中的验证。类似

def before_destroy 
    if (self.rid.rid_pictures.count <= 1) 
     errors.add_to_base "Almost one image" 
     false 
    end 
end 

东西没有测试

+0

不得不因为需要改用另一种策略。我将在下一次尝试这一点......有一件事是肯定的:PaperClip真的需要更好的管理来删除,我想我必须自己去处理它! – Alain 2011-01-22 04:33:08