我有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
当我调用方法时,我传入了product对象和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 )
答案 0 :(得分:2)
我通过在连接表上创建记录来解决这个问题:
pr = ProductRecommendation.new(:rating_set => rating_set.id, :recommendation_id => r.id, :product_id => product.id)
pr.save!
答案 1 :(得分:0)
你很亲密......
product.product_recommendations.create( {:rating_set => rating_set}, {:recommendation => r} )
在您提到的方法中 - “创建”方法将创建一个新项目并将其放入数据库中。那可能不是你想要的。相反,使用“new”并为新建议书设置params,如下所示:
r = Recommendation.new(title: @title, description: @description, etc.).
r.save
如果您在控制器中执行此操作,则可能不需要将其拆分为单独的方法。只需调用new并保存在控制器中(创建操作) - 这将允许您处理错误,重定向等。