2013-02-22 108 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 

希望幫助別人。