ActiveRecord:在belongs_to关联上查询条件

时间:2017-11-07 12:47:21

标签: ruby-on-rails activerecord

我有一个表transaction和表user

transactions
   id
   user_id
users
   id
   user_role

这是课程Transaction

class Transaction < ApplicationRecord
     belongs_to :user
end

现在,我想查询用户使用role = 2进行的所有事务。我的查询将是:

SaleTransaction.includes(:user).where(user: {user_role: 2}).all

但我遇到了这个错误:

  

ActiveRecord :: StatementInvalid:PG :: UndefinedTable:错误:丢失   表格#34;用户&#34;

的FROM子句条目

我的问题是:如何查询belongs_to关联。

2 个答案:

答案 0 :(得分:2)

:joins将加入表格并返回选定的字段。如果你在连接查询结果上调用关联,它将再次触发数据库查询

:includes将急切加载包含的关联并将其添加到内存中。 :includes加载所有包含的表属性。如果您在包含查询结果上调用关联,则不会触发任何查询

您需要做的是:

SaleTransaction.joins(:user).where("users.user_role = 2")

答案 1 :(得分:2)

您应该在where子句中指定表名。尝试

SaleTransaction.includes(:user).where(users: {user_role: 2}).all

但是你可以做得更好。如果用户在模型中有scope,则可以使用此类

class User
   scope :second_user_role
end


SaleTransaction.joins(:user).merge(user.second_user_role).all