我有以下模型:recommendations
,ratings
和product
。 product
has_many
recommendations
,recommendation
has_many
products
,recommendation
has_many
ratings
和rating
belongs_to
一个recommendation
我目前正在使用以下查询来查找索引中的所有记录:
@recommendations = Recommendation.find(:all, :joins => :products, :conditions => ["product_id = ? AND rating_set = ?", (params["product_id"]), (params["rating_set_id"])])
并获得每个记录建议评级,我在我的视图中调用另一个范围。
如何设置@recommendatons
以获取特定product_id
和rating_set
找到的所有推荐和评分?
我试过了:
Recommendation.find(:all, :joins => :products,:include => :ratings, :conditions => ["product_id = ? AND rating_set = ?",2086981,40]).each do |rec|
puts rec.rating
end
已打印Nil
。
更新型号:
产品
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
has_many :ratings
end
评分:
class Rating < ActiveRecord::Base
belongs_to :recommendation
end
这是我需要的结果(仅在创建评级时才有效,这就是我无法使用它的原因):
@recommendations = Rating.find(:all, :conditions => ["product_id = ? AND rating_set = ?", (params["product_id"]), (params["rating_set_id"])])
我要问的是什么: 我需要找到所有建议,其中product_id和rating_set =?,?并且鉴于此,找到属于这些建议的所有评级。
更新
我可以使用以下查询取回属于推荐的所有评分:
Recommendation.joins(:product_recommendations).includes(:ratings).where(:product_recommendations => { :rating_set => 48, :product_id => 2144877 })
当我遍历返回的评级数组时,它们的范围不是正确的rating_set,而是我获得属于特定推荐的所有rating_sets的所有评级。如何为每个推荐和rating_set取回一系列评级。
答案 0 :(得分:0)
试试这个,
recommendations = Recommendation.joins(:product).includes(:ratings).where(:product_id => 2086981, :rating_set => 40).all
recommendations.each do |rec|
puts rec.ratings # this will return an array of ratings if this recommendation has ratings.
end
我认为您的:joins => :products
应该是单数的::joins => :product
而您的:include
应该是:includes
。
修改强>
匹配新模型代码中的关系的新查询:
recommendations = Recommendation.joins(:products, :product_recommendations).includes(:ratings).where(:products => { :id => 2086981 }, : product_recommendations => { :rating_set => 40 }).all
recommendations.each do |rec|
puts rec.ratings # this will return an array of ratings if this recommendation has ratings.
end
答案 1 :(得分:0)
您的数据模型实际上是您所描述的吗?您的初始描述似乎表明它是所有父级 - >子级(一对多)关系。产品具有一对多的推荐和推荐具有一对多的评级
这意味着像这样的表结构:
products table
:id
recommendations table
:id
:product_id
ratings table
:id
:recommendation_id
但是,您发布的所有生成的SQL查询似乎都显示了某种名为product_recommendations
的连接表。那是什么?
您是否在产品和推荐之间建立了多对多关系,并使用名为product_recommendations
的联接表?
如果是这样,我会说您的查询应该有效,但是您需要通过为两个产品定义字段而不是has_many
和belongs_to
但has_and_belongs_to_many
来帮助Rails。和推荐模型。
看看这有助于http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association