具有class_name的搜索关联

时间:2016-11-28 12:13:42

标签: mysql ruby-on-rails ruby activerecord

我的书模型看起来像这样:

activitiInitEngineBean.getRuntimeService()
                                 .createExecutionQuery()
                                 .list()

如何搜索具有特定作者姓名的图书?我先加入表格:

class Book < ActiveRecord::Base
  belongs_to :author, class_name: 'User', touch: true
  belongs_to :translator, class_name: 'User'
end

但我不能链

Book.joins(:author).joins(:translator)

因为没有&#34;作者&#34;数据库中的表。是

.where('authors.name = "Tolkien"')
这是一个安全的方法吗?事实上,译者和作者都没有风险吗? (select()方法不是一个选项,我需要activerecord :: relation here)

1 个答案:

答案 0 :(得分:0)

您需要在查询中传递表名

Book.joins(:author).where(users: {name: 'Tolkien'})
  

.where('users.name = "Tolkien"')这是一个安全的方法吗?

如果您担心使用同一个表的两个关联,您可能需要添加一个字段来区分它们

对于前。一个布尔字段author并使用带有关联的条件来解决问题

class Book < ActiveRecord::Base
  belongs_to :author, -> { where(author: true) }, class_name: 'User', touch: true
  belongs_to :translator, -> { where(author: false) }, class_name: 'User'
end