使用别名查询关联

时间:2016-07-05 17:52:21

标签: sql ruby-on-rails activerecord

我有一个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.nameusers.name,可能还有其他一些事情,但都无济于事。我怎么能这样做?

注意:我不想为此添加gem。我正在寻找一种原生于rails的解决方案。

编辑:

我的schema.rb中存在的外键

tasks.users.name

第二次编辑:

我还需要一个能够返回AREL的解决方案。我可以通过返回一个对象数组来实现这个功能,但是我需要在结果中添加其他查询方法,所以它必须是AREL。

2 个答案:

答案 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}%")