0

オーバーライドしようとしています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
4

3 に答える 3

1

クラスの両方のフィールドを異なるテーブルに配置することをお勧めします。そのために問題が発生している可能性があります。

ただし、両方のクラスに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
于 2013-02-22T09:16:26.620 に答える
0

これは私にとってはうまくいきます...rails4

  validates :photo, :presence => true,
  :attachment_content_type => { :content_type => "image/jpg" },
  :attachment_size => { :in => 0..10.kilobytes }
于 2014-02-20T21:16:05.937 に答える
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

それが誰かを助けることを願っています。

于 2017-05-19T10:53:54.737 に答える