Rails は最初に 1 つの値で初期化しますが、作成された場合はさらに値を追加します。質問する

Rails は最初に 1 つの値で初期化しますが、作成された場合はさらに値を追加します。質問する

次の例を見てみましょう。

GroupMember.where(:member_id => 4).first_or_initialize

もし私がこんなことを言いたかったら、

member_id が 4 の GroupMember が存在する場合は、それを「検索」します。それ以外の場合は、member_id が 4 で、group_id が 7 の GroupMember を作成します。

したがって、上記のステートメントでは、member_id のみをチェックし、存在しない場合は、複数の属性を持つ GroupMember を作成するようにしたいと思います。どのように記述すればよいでしょうか? Rails 4.0 を使用しています。

ベストアンサー1

これも機能します:

GroupMember.where(member_id: 4).first_or_initialize(group_id: 7)

first_or_initialize に渡される属性は、新しいレコードを作成するときにのみ使用され、"where" 句の属性と結合されます。

おすすめ記事