1

保存する前に、常にモデルにオブジェクトが存在するかどうかを確認してもらいたいです。もしそうなら、新しいオブジェクトを作成するのではなく、既存のオブジェクトを使用します。

これをモデルのbefore_saveActiveRecordクラスに直接追加することは可能ですか?

自己の価値を変えることはできないので、これは不可能だと思います。

4

2 に答える 2

1

これをに追加することはできないと思いますbefore_save。オブジェクトを作成する場所が少ない場合は、またはを使用するのではなく、手動で指定(find_or_createまたはfind_or_initialize)することができます。createnew

常にそれを実現したい場合は、newメソッドをオーバーライドして次のように動作させることができますfind_or_initialize

于 2012-06-27T17:09:42.470 に答える
1

ActiveRecordはすでにこの機能を提供しています。あなたは次のようなことをすることができます:

User.find_or_initialize_by_email('some@email.com')

これにより、データベースからユーザーが見つかった場合はそのユーザーが返され、渡されたパラメーターに電子メールが設定された新しいユーザーが返されます。その後、他の方法と同じようにオブジェクトを使用し、完了したらsaveを呼び出すことができます(必要に応じて更新または作成されます)。

http://api.rubyonrails.org/classes/ActiveRecord/Base.htmlの詳細(ページでfind_or_initialize_by_を検索してください)

于 2012-06-27T17:09:53.860 に答える