0

次のように、関連付けを通じて多くの has を使用しています。

class Rating < ActiveRecord::Base  
  has_many :recommendation_ratings, :dependent => :destroy
  has_many :recommendations, :through => :recommendation_ratings
end

class Recommendation < ActiveRecord::Base  
  has_many :recommendation_ratings, :dependent => :destroy
  has_many :ratings, :through => :recommendation_ratings
end

class RecommendationRating < ActiveRecord::Base  
  validates :recommendation_id, presence: true
  validates :rating_id, presence: true

  belongs_to :recommendation
  belongs_to :rating
end

現在、次のようにコントローラーで関連付けを作成しています。

   rr   = RecommendationRating.find_by_recommendation_id(recommendation_id)
   rr ||= RecommendationRating.new(recommendation_id: recommendation_id)

   rr.rating_id = rating_id
   rr.save

または、次のようにレコメンデーションに評価を割り当てることもできます。

   @recommendation = Recommendation.find(recommendation_id)
   @rating = Rating.find(rating_id)
   @recommendation.ratings << @rating

これらのレコードを関連付ける正しい方法はどれですか?最初の方法でそれを行うことの欠点はありますか?

4

2 に答える 2

0

できると思います

RecommendationRating.find_or_create_by_rating_id_and_recommendation_id(
  rating_id,
  recommendation_id
)

私が正しく理解していれば、これはあなたが説明した両方の方法と機能的に同等であると私は信じています。

于 2013-02-01T02:22:04.660 に答える
0

それはあなたが必要とするものに依存します。

最初のものは、recommendation_ratingすでに存在する場合はレコードを更新し、呼び出し後にコールバックと検証を実行できるようにしますsave

2 つ目は、呼び出すたびに評価を<<作成し、データベースにレコードを直接作成するため、検証とコールバックはトリガーされません。

于 2013-02-01T02:14:50.683 に答える