我有一个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)
答案 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
中,您始终必须使用表名(复数),但在includes
和joins
中,它取决于关系。在这种情况下,solicitation
属于lead
,因此您必须使用:lead
(单数)。这有点令人困惑,但我希望这能为你解决这个问题。