1

我有一个 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)
4

1 回答 1

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(单数)。这有点令人困惑,但我希望这能为您解决问题。

于 2013-07-01T03:11:38.350 回答