答えて

13

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を呼び出すことができます正しい方向。

+0

どうもありがとうございました。それは私が行った方法です!答えに時間を割いていただきありがとうございます。 –

1

いくつかのケースでは、find_or_initialize_by_は有用でありfind_or_create_byで検証をスキップする必要はありません。このため

、あなたはRORの代替流れと方法の下に使用することができます:

クラスのポスト<はActiveRecord ::ベース

attr_accessor:

  • はこのようなモデルを更新します。 skip_validation
    belongs_toの:validates_presence_ofユーザー
    :タイトル、 ない限り:skip_validation

    エンド

  • あなたはこのように今それを使用することができます:私はここに代わりfind_or_create_byfirst_or_createを使用している
    Post.where(user_id: self.id).first_or_create!(skip_validation: true)

。これでより多くの列の名前と値を渡すことができます。これで検証は機能しません。

  • あなたは強いパラメータの終わりとエントリを追加しているとき、それは検証で動作しますので、この「skip_validation」を許可する必要はありませんのために何も変更せずに続けることができます。これを使用する

  • 、あなたがしてパラメータを渡すことにより、検証せずにそれを使用することができます。

関連する問題