Rails 4:如何有条件地包含关联对象

时间:2016-02-02 16:58:05

标签: ruby-on-rails activerecord

以下是我要做的事情:

Product.first.reviews.includes(:comments).where('comments.reply_to_id=?', nil)

所以基本上我想加载产品评论以及任何相关评论。

评论属于评论,不属于产品

这是错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'comments.reply_to_id' in 'where clause': SELECT `reviews`.* FROM `reviews` WHERE `reviews`.`product_id` = 8 AND (comments.reply_to_id=NULL)

来自schema.rb

  create_table "comments", force: :cascade do |t|
    ...
    t.integer  "reply_to_id",      limit: 4
  end

2 个答案:

答案 0 :(得分:2)

来自API

  

如果您想为所包含的模型添加条件,则必须这样做   明确引用

当您使用.references 条件

时,您需要在查询末尾添加includes
Product.first.reviews.includes(:comments).where('comments.reply_to_id=?', nil).references(:comments)

答案 1 :(得分:2)

@pavan是对的。但您可以使用Hash语法自动找到它。

Product
 .first
 .reviews
 .includes(:comments)
 .where(comments: { reply_to_id: nil })