Paperclip覆盖子类中的validates_attachment

时间:2013-02-22 07:25:04

标签: ruby-on-rails paperclip paperclip-validation

我正在尝试覆盖validates_attachment中的Subclass,但我注意到它只适用于Superclass验证;我想知道为什么子类中的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

3 个答案:

答案 0 :(得分:1)

我建议您将类的字段放在不同的表中。你可能因此而遇到问题。

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

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

我认为您有attach_type列,但根据您确定附件类型是否为SubClass的方式,您可以自行更改。

您也可以尝试从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

答案 1 :(得分:0)

这适用于我... rails 4

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

答案 2 :(得分:0)

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

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

希望有人帮助。