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} ) 

在您提到的方法中-“创建”方法将创建一个新项目并将其放入数据库中。那可能不是你想要的。相反,使用“新”并为新推荐设置参数,如下所示:

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

如果您在控制器中执行此操作,则可能不需要将其拆分为单独的方法。只需调用 new 并保存在控制器中(创建操作) - 这将允许您处理错误、重定向等。

于 2013-01-15T00:25:10.793 回答