我有一个users
表和一个tasks
表,其中的模型具有以下关联:
class Task < ActiveRecord::Base
belongs_to :owner, class_name: User
end
我正在尝试构建一个查询,以便搜索task
的{{1}}及其description
的名称:
owner
...但我不知道如何正确查询任务所有者的users表。代替includes(:owner).where("LOWER(tasks.description) LIKE ? OR LOWER(owner.name) LIKE ?", "%#{q.downcase}%", "%#{q.downcase}%")
,我尝试了owner.name
,users.name
,可能还有其他一些事情,但都无济于事。我怎么能这样做?
注意:我不想为此添加gem。我正在寻找一种原生于rails的解决方案。
编辑:
我的schema.rb中存在的外键
tasks.users.name
第二次编辑:
我还需要一个能够返回AREL的解决方案。我可以通过返回一个对象数组来实现这个功能,但是我需要在结果中添加其他查询方法,所以它必须是AREL。
答案 0 :(得分:0)
如果要在视图或查询中调用owner.name,则需要包含owner_id的foreign_key。
其次,您应该仍然可以调用用户,但由于它是belongs_to,因此它将是user.name,而不是users.name
如果你设置了foreign_key,你可以像之前那样调用owner.name,它会起作用。
这可以帮助您进行设置:
http://guides.rubyonrails.org/active_record_migrations.html#foreign-keys
答案 1 :(得分:0)
在整天挖掘后,this post帮助了我,我的解决方案如下:
joins("LEFT OUTER JOIN users ON users.id = tasks.owner_id").where("LOWER(users.name) LIKE ? OR
LOWER(tasks.description) LIKE ?",
"%#{q.downcase}%", "%#{q.downcase}%")