ActiveRelation where子属性的语句

时间:2013-07-01 02:54:38

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有一个has_one条件,我正在尝试访问但是遇到了一些麻烦

Solicitation belongs_to :lead
Lead has_many :solicitations

我的第一个声明抓住了用户的所有请求

@solicitations = current_user.solicitations.includes(:lead)

我已经可以访问属性lead.case_type并且可以循环遍历关系并手动将它们放在他们的位置,但我认为它们是一种更简单的方法。

我想做的是类似于

@solicitations.where("lead.case_type = ?", "Civil") 

我试过这些并收到一个未知的列错误lead.case_type

Solicitation.all(:conditions => {:lead => {:case_type => 'Civil'}}, :joins => :lead)

1 个答案:

答案 0 :(得分:1)

问题是您使用的是lead.case_type,但是(如果您遵循Rails的约定),您的表名称为leads。这应该有效:

@solicitations = current_user.solicitations.includes(:lead).where("leads.case_type = ?", "Civil")

您也可以使用joins

@solicitations = current_user.solicitations.joins(:lead).where("leads.case_type = ?", "Civil")

includes执行外连接,而joins执行内连接。由于您正在查询连接表,因此内部连接会更好。

where中,您始终必须使用表名(复数),但在includesjoins中,它取决于关系。在这种情况下,solicitation属于lead,因此您必须使用:lead(单数)。这有点令人困惑,但我希望这能为你解决这个问题。