0

アセット モデル (標準的なクリップ セットアップ) の has_many 関連付けを持つユーザー モデルがあります。ビューでは、fields_for ヘルパーを使用して、アセット用の多数のファイル フィールドをセットアップします。エンド ユーザーがファイルを指定しない場合、資産レコードは保存されません。それが私が欲しいものです。ここまでは順調ですね。

次に、アセット モデルにキャプション属性を追加しました。また、対応する各ファイル フィールドにテキスト フィールドを配置します。ここで問題が発生します。エンド ユーザーがファイルまたはキャプションを指定しない場合、アセット レコードは保存されます。保存されたレコードには空の文字列のキャプションがあり、他のすべてのクリップ属性は nil です。

問題は、ペーパークリップ属性に割り当てられたファイルがない場合にアセット レコードが保存されないようにするにはどうすればよいかということです。また、アセットはオプションであるため、エラー フィードバックが生成されることは望ましくありません。何か案は?ありがとう。

4

1 に答える 1

0

Asset モデルでを実行することもできますが、validates_presence_of :captionキャプションも必要になります。User にリンクされたすべてのアセットでファイルの存在を確認するこのチェックはどうbefore_validationですか? もしかしてこういうこと?(ちょっと工夫が必要かもしれません)

class User < AR::Base
  has_many :assets, :dependent => :destroy

  before_validation :check_assets

  def check_assets
    self.assets.each do |asset|
      unless asset.attachment.file?
        if asset.new_record?
          self.assets.delete(asset)
        else
          asset.destroy
        end
      end
    end
  end
end
于 2012-08-26T20:08:07.573 に答える