【问题标题】:Paperclip override validates_attachment in subclass回形针覆盖子类中的 validates_attachment
【发布时间】:2013-02-22 07:25:03
【问题描述】:

我试图在Subclass 中覆盖validates_attachment,但我注意到它只适用于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

【问题讨论】:

  • 您收到什么错误信息?是undefined method validates_attachment 吗?还告诉我你用的是哪个版本的回形针?
  • 我正在使用回形针 (3.1.4)。实际上,没有错误消息,但在 Superclass 中执行验证而不是在 Subclass 中执行。
  • 你把这两个类放在同一张表里了吗?
  • 我放在同一张桌子上。我在这个 attachmet 中使用了多态概念。

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


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    这对我有用... rails 4

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

    【讨论】:

      【解决方案3】:

      以防其他人遇到需要实例访问才能验证的问题,我使用了以下方法:

      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
      

      希望对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 2015-12-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多