ruby-on-rails - Rails 多连接 AR 查询和 where 子句

标签 ruby-on-rails ruby-on-rails-3 activerecord

我有以下型号:

class Product < ActiveRecord::Base
  has_many :product_recommendation_sets, :dependent => :destroy
  has_many :recommendation_sets, :through => :product_recommendation_sets
end

class ProductRecommendationSet < ActiveRecord::Base
  belongs_to :product
  belongs_to :recommendation_set
end

class RecommendationSet < ActiveRecord::Base  
  has_many :product_recommendation_sets, :dependent => :destroy
  has_many :products, :through => :product_recommendation_sets

  has_many :recommendation_recommendation_sets, :dependent => :destroy
  has_many :recommendations, :through => :recommendation_recommendation_sets
end

class RecommendationRecommendationSet < ActiveRecord::Base
  belongs_to :recommendation
  belongs_to :recommendation_set
end

class Recommendation < ActiveRecord::Base
   has_many :recommendation_recommendation_sets, :dependent => :destroy
   has_many :recommendations, :through => :recommendation_recommendation_sets
end

我试图选择所有 recommendations其中 product_id = x , 通过做:
RecommendationSet.joins(:products, :recommendations).where(product_id:1)

但是我收到一个未知的列错误。如何通过给定的 product_id 加入选择所有推荐。
伪代码:
查找 recommendation_sets哪里product_id = ? .查找 recommendations哪里recommendation_set_id = ? .

最佳答案

你很接近,在你的情况下 这应该有效:

RecommendationSet.joins(:products, :recommendations).where(products: { id: 1 })

请记住 在 where 子句中,您必须使用表名 在条件散列中,而不是关系的名称。

作为一个例子,考虑这些关系:
User belongs_to :group
Group has_many :users

注意语法(复数/单数):
User.joins(:group).where(groups: { name: 'Admin' })
#               ^             ^
Group.joins(:users).where(users: { id: 15 })
#                ^            ^

关于ruby-on-rails - Rails 多连接 AR 查询和 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991957/

相关文章:

ruby-on-rails - 如何在 redis rails 中订阅多个发布者?

ruby-on-rails - 将 ruby​​ 哈希转换为 json 对象

ruby - ruby on Rails 3.2 中的循环任务调度

ruby-on-rails - 当没有记录时 find() 为 nil

sql - 如何根据 ActiveRecord 中的条件在每第 n 个项目中插入?

mysql - rails 中的多个表连接

ruby-on-rails - Rails_admin,用另一个字段的值更改一个字段的值

ruby-on-rails - 你能做一个 :order in ruby after a find?

ruby-on-rails - 测试 Rails 应用程序的最佳方法是什么?

ruby-on-rails - Heroku & Rails - Varnish 只是偶尔缓存