0

Userhas_manyDishから までのモデルがありRecommendationます。Dishの一意性だけでなく、の一意性も強化したいと思いRecommendationます。

これについてはどうすればよいActiveRecordですか?

私の中でdish.rb

validate_uniqueness_of :dish_name

私がしたいのは、ユーザーが料理を推薦するとき、それが存在しない場合は新しい料理を作成してから、推薦を作成することです。料理が既に存在する場合は、レコメンデーションを作成して既存の料理を指定するだけです。

これらの状況を手動で処理する必要がありますか (つまり、dishコントローラー内の存在を確認する必要がありますか)、または ActiveRecord には内部的に処理する方法がありますか?

更新: が作成されたvalidate_uniqueness_of :dish_name場合にのみ、エラー メッセージをチェックして返します。dishおそらくrecommendation、既存の を指すnew は作成されませんdish

4

2 に答える 2

2

あなたはいつでも.find_or_create_by_<attribute>最初の料理を見つけることができます

于 2013-03-13T14:15:46.997 に答える
1

ご覧のとおり、複数のユーザーが同じ料理をおすすめできます。

モデルは次のようになります。

Class User < ActiveRecord::Base
has_many :recommendations
has_many :dishes, :through => :recommendations
end

Class Dish < ActiveRecord::Base
has_many :recommendations
has_many :users, :through => :recommendations
end

したがって、データベースの Recommendations テーブルには、(id とタイムスタンプのほかに) と という 2 つの列が必要user_idですdish_id。ユーザーが同じ料理を 2 回おすすめしていないことを検証するには、次のようにします。

Class Recommendations < ActiveRecord::Base
belongs_to :dish
belongs_to :user
validates_uniqueness_of :dish_id, :scope => :user_id
end

そして、ダンが推奨する方法を知らなかった.find_or_create_byので、間違いなくそのような方法を使用してみてください.

私が助けてくれることを願っています:)

于 2013-03-13T14:17:44.320 に答える