我有以下模特
class User < ActiveRecord::Base
has_many :documents
has_many :requests
end
class Document < ActiveRecord::Base
has_many :requests
belongs_to :user
end
class Request < ActiveRecord::Base
belongs_to :document
belongs_to :requester, class_name: 'User', foreign_key: 'user_id'
end
基本上,有些用户可以拥有许多文档。用户可以请求访问其他用户的文档。
现在我想获得发送给用户的具有特定状态的请求列表。
以User
方法执行的此查询无法正常工作
Request.includes(:document)
.where(status: Request::SOME_STATUS, documents: { user: self })
我收到错误
ERROR: column documents.user does not exist
显然可以通过将user: self
替换为user_id: id
来修复,但我不明白为什么Active Record不能与user: self
一起使用。这种行为是否记录在案?
答案 0 :(得分:1)
Date date1 = new Date();
Date date2 = new Date();
if (DateUtils.truncatedCompareTo(date1, date2, Calendar.DAY_OF_MONTH) == 0)
// TRUE
else
// FALSE
属于某个文档,因此在此上下文中,此部分查询无效:Request
在belongs_to关系的情况下,如果将ActiveRecord对象用作值,则可以使用关联键来指定模型。
这意味着,documents: { user: self }
工作时,关系必须为self
,以便您可以获取属于特定文档的请求。
belongs_to
的作用原因是user: id
表恰好有documents
列。