2013-07-01 20 views
1

我有我试图访问一个HAS_ONE条件,但我有一个小麻烦ActiveRelation其中儿童语句属性

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

的问题是,你正在使用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(单数)。这有点令人困惑,但我希望这可以为你解决。

+0

这两个工作,非常感谢你对加入与包括的语法和解释的帮助! – Austio