我有一个表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
关联。
答案 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