1

私は3つのモデルを持っています:

class Product < ActiveRecord::Base
  has_many :product_recommendations, :dependent => :destroy
  has_many :recommendations, :through => :product_recommendations
end

class Recommendation < ActiveRecord::Base
  has_many :product_recommendations, :dependent => :destroy
  has_many :products, :through => :product_recommendations
end

class ProductRecommendation < ActiveRecord::Base
  belongs_to :recommendation
  belongs_to :product
end

新しい推奨事項を作成する方法もあります。

def self.get_recommendation(product, rating_set)
    r = Recommendation.create
           r.title            =  @title
           r.description      =  @description
           r.cover_img        =  @image_url
           r.curr_price       =  @curr_item_price
           r.save! 
end

メソッドを呼び出すときに、製品オブジェクトと rating_set 属性を渡します。

1)製品オブジェクトとの product_recommendation 関連付けを作成するにはどうすればよいですか。2) 新しく作成されたレコメンデーション オブジェクト。3) ProductRecommendation 結合テーブルに属する追加の属性 (rating_set)。

運が悪かったので、次のことを試しました:

product.create_product_recommendations( {:rating_set => rating_set}, {:recommendation => r} ) 
product.recommendations.create( :rating_set => rating_set, :recommendation => r )
4

2 に答える 2

2

次のように、結合テーブルにレコードを作成することでこれを解決しました。

pr = ProductRecommendation.new(:rating_set => rating_set.id, :recommendation_id => r.id, :product_id => product.id)
pr.save!
于 2013-01-15T06:14:40.640 に答える
0

あなたは近いです...

product.product_recommendations.create( {:rating_set => rating_set}, {:recommendation => r} ) 

あなたが言及したメソッドでは、'create'メソッドは新しいアイテムを作成し、それをDBに配置します。それはおそらくあなたが望むものではありません。代わりに、「new」を使用して、次のように新しい推奨事項のパラメーターを設定します。

r = Recommendation.new(title: @title, description: @description, etc.).
r.save

コントローラでこれを行う場合は、別のメソッドに分割する必要がない場合があります。newを呼び出して、コントローラーに保存するだけです(アクションの作成)。これにより、エラーやリダイレクトなどを処理できます。

于 2013-01-15T00:25:10.793 に答える