2017-05-07 15 views
0

uploadableと呼ばれる、マルチフォームアソシエーションを持つUploadというモデルを保存しようとしています。レール内のポリモーフィックアソシエーションの検証をスキップ

ここでは、ユーザーがファイルをドラッグアンドドロップすることができるdropzone js領域を実行しています。サーバー側でアップロードを作成し、htmlで追加されるいくつかのキーを返す必要があります。フォームを保存する(ユーザーがフォームを保存した場合、作成したコメントでuploadable_idとuploadable_typeを設定するか、それ以外の場合はアップロードが自動的に24時間以内に削除されます)

唯一の問題は、 @ upload.saveを実行するとuploadable_id e uploadable_typeが表示されます

アップロード可能な属性についてのみ(存在の)妥当性検査をスキップできますか?私は@ upload.save(validate:false)を使用しないでください。なぜなら、1つではなく、すべてのバリデーションをスキップするからです。

私は偽の属性使ってみた:

class Upload < ApplicationRecord 
    belongs_to :uploadable, polymorphic: true 
    has_attached_file :file 

    attr_accessor :skip_uploadable_validation 

    validate :uploadable, unless: :skip_uploadable_validation 

end 

をそして私が行います

@upload = Upload.new 
@upload.file = params[:file] 
@upload.skip_uploadable_validation = true 

@upload.save # it fails anyway 

しかし、それは動作しますしません。

答えて

0

あなたはすることができます。この行にoptional: trueを置く:

belongs_to :uploadable, polymorphic: true, optional: true

またはこの方法を使用して:

with_options unless: :skip_uploadable_validation do 
    validates :uploadable_id, presence: true 
    validates :uploadable_type, presence: true 
end 
関連する問題