2013-02-22 70 views
0

我试图覆盖Subclass中的validates_attachment,但我注意到它只适用于Superclass验证;我想知道为什么我的validates_attachment在子类中不起作用。有人遇到这个问题吗?你是如何解决这个问题的?这里是一个示例代码:回形针覆盖子类中的validates_attachment

class Superclass 
    validates_attachment :logo, :image_ratio => { :ratio => {"1:1" => "28", "4:1" => "50", "5:1" => "40"} } 
end 

class Subclass < Superclass 
    validates_attachment :logo, :image_ratio => { :ratio => {"1:1" => "40", "2:1" => "60"} } 
end 
+0

你得到了什么错误信息?它是'未定义的方法validates_attachment'?另外告诉我,你使用的是什么版本的回形针? – 2013-02-22 07:35:05

+0

我正在使用回形针(3.1.4)。实际上,没有错误消息,但是Superclass中的验证不是在Subclass中执行的。 – Sinal 2013-02-22 08:58:32

+0

你把这两个类放在同一个表中吗? – 2013-02-22 09:10:06

回答

1

我建议你应该把两个类的字段放在不同的表中。因此,你可能会遇到问题。

但是,如果你真的想只有一个表,两个类那么我相信你可以使用这样的事情:

validates_attachment :logo, :image_ratio => { :ratio => {"1:1" => "40", "2:1" => "60"} }, :unless => Proc.new {|attach| attach.type == "SubClass"} 

我假设你有一个attach_type列,但取决于你如何确定附件类型是否为​​,它由您决定更改。

您也可以尝试删除您validates_attachment从模型中的Subclass,而是尝试with_options,如下所示:

with_options :unless => :attach_type == "SubClass" do |attach| 
    attach.validates_attachment :logo, :image_ratio => { :ratio => {"1:1" => "40", "2:1" => "60"}} 
end 
+0

谢谢。我现在开始工作了。 – Sinal 2013-02-22 10:40:29

0

这对我的作品...轨道4

validates :photo, :presence => true, 
    :attachment_content_type => { :content_type => "image/jpg" }, 
    :attachment_size => { :in => 0..10.kilobytes } 
0

Incase任何其他人遇到问题,他们需要实例访问才可以验证我使用以下内容:

class AttachmentDynamicContentTypeValidator < Paperclip::Validators::AttachmentContentTypeValidator 
    def validate_each(record, attribute, value) 
     @record = record 
     super 
    end 

    def allowed_types 
     @record.my_valid_types_array || ["text/plain"] 
    end 

    def check_validity!; end 
end 

而且在实际的资产比如我增加了以下内容:

class Asset < ActiveRecord::Base 
    validates :asset, attachment_dynamic_content_type: :asset_content_type 
end 

希望帮助别人。