ダイナミックな検索/作成方法でバリデーションをスキップすることはできますか?find_or_create_by_でバリデーションをスキップする方法は?
p = Post.new
p.title = nil
p.body = nil
p.save(:validate => false)
がfind_or_create_by_title
と同じことをするのが大好きだ:私のような何かを行うことができ、通常の保存と例えば
。
ダイナミックな検索/作成方法でバリデーションをスキップすることはできますか?find_or_create_by_でバリデーションをスキップする方法は?
p = Post.new
p.title = nil
p.body = nil
p.save(:validate => false)
がfind_or_create_by_title
と同じことをするのが大好きだ:私のような何かを行うことができ、通常の保存と例えば
。
code in Rails right nowでも可能ですが、コードの書き方は少し冗長である方が良いかもしれません。 find_or_initialize_by_
を使用すると新しいオブジェクトを作成できますが、保存はしません。
# No 'Winter' tag exists
winter = Tag.find_or_initialize_by_name("Winter")
winter.new_record? # true
幸運をし、あなたがより多くのポインタが必要な場合は私に知らせて:あなたは、その後もdocumentationに、彼らはので、私は以下のことが含まれます見つけるのは難しいですきちんとしたデモンストレーションを持って、カスタムオプションでsaveを呼び出すことができます正しい方向。
いくつかのケースでは、find_or_initialize_by_
は有用でありfind_or_create_by
で検証をスキップする必要はありません。このため
、あなたはRORの代替流れと方法の下に使用することができます:
クラスのポスト<はActiveRecord ::ベース
attr_accessor:
- はこのようなモデルを更新します。 skip_validation
belongs_toの:validates_presence_ofユーザー
:タイトル、 ない限り:skip_validation
エンド
find_or_create_by
のfirst_or_create
を使用しているPost.where(user_id: self.id).first_or_create!(skip_validation: true)
。これでより多くの列の名前と値を渡すことができます。これで検証は機能しません。
あなたは強いパラメータの終わりとエントリを追加しているとき、それは検証で動作しますので、この「skip_validation」を許可する必要はありませんのために何も変更せずに続けることができます。これを使用する
、あなたがしてパラメータを渡すことにより、検証せずにそれを使用することができます。
どうもありがとうございました。それは私が行った方法です!答えに時間を割いていただきありがとうございます。 –