1

オプションの uload フィールドがあり、空のままにすることができます。しかし、使用する際には、添付ファイルのサイズと内容を検証したいと考えています。したがって、モデルでこの検証を使用します。

validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes }

これは、添付ファイルがある場合は機能しますが、空の場合は失敗します。添付ファイルがある場合にのみ検証するようにするにはどうすればよいですか?

ここに記載されている解決策は、残念ながら機能していません。

4

2 に答える 2

2

あなたが提供したリンクは、私が提案するものをあなたに与えています-if:引数を使用して

--

if:

if:検証で使用すると、基本的に、バリデーターが起動する条件を決定できます。リンクからわかるように、みんなが使っていますif: :avatar_changed?

おそらく遭遇した問題は、またはのいずれかを使用して条件を判断できるProcことinstance methodです。そして、これらの人はavatar(組み込みのものではありますが)メソッドを使用しているため、あなたが望む結果が得られる可能性は低いです。

私はこれをします:

validates_attachment :attachment, content_type: { content_type: ["image/jpeg", "image/gif", "image/png"] }, size: { in: 0..500.kilobytes }, if: Proc.new {|a| a.attachment.present? }

これは基本的に、attachmentオブジェクトが存在するかどうかを判断し、検証にtrueまたはを提供します。false

于 2014-06-04T06:25:09.427 に答える
0

これを試して:

has_attached_file :attachment, :styles => { :small => "200x200>" }
validates_attachment :attachment,
    :size => { :in => 0..500.kiobytes },
    :content_type => { :content_type => /^image\/(jpeg|png|gif|tiff)$/ }

私のアプリで動作しています。ただし、ユーザーがアップロードしないことを選択した場合に備えて、デフォルトの添付ファイルを設定しました。

于 2014-06-04T06:23:54.313 に答える