1

我有3種型號:使用的has_many通過與附加的屬性創建關聯

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 

我也有創造了一個新的建議(S)的方法:

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) 

回答

2

我解決了這個通過在連接表創建記錄像這樣:

pr = ProductRecommendation.new(:rating_set => rating_set.id, :recommendation_id => r.id, :product_id => product.id) 
pr.save! 
0

你靠近...

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

在你所提到的方法 - 「創建」方法將創建一個新的項目,把它放在數據庫中。這可能不是你想要的。相反,使用「新」,並把params新建議,像這樣:

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

如果您在控制器這樣做,你可能不需要它分割成一個單獨的方法。只需調用新的,並保存在控制器(create動作) - 這將讓你處理錯誤,重定向等

+0

對於某些原因,它不添加recommendation_id。它將其保存爲空。這符合預期,但我不知道如何添加額外的rating_set屬性:'code' @ product = product @recommendation = r @ product.recommendations << @recommendation – Yogzzz