1

我正在尝试做一个 where 语句,它只显示具有该特定关联的结果。

例如:

一个公司通过公司状态有许多状态。他们可以有多种状态,可以是黄金、白银和/或青铜,或者根本没有。我试图让我的结果只返回具有状态(金、银和/或青铜)的公司,而不是那些没有状态的公司。

4

4 回答 4

0

您的用例没有很好地表达,但我认为您想要的是找到状态与指定状态匹配的公司:

Company.includes(:statuses).where('status.name = ?', params[:status_name])

假设 Company ,那应该给你正确的查询has_many :statuses

于 2011-08-14T19:59:53.283 回答
0

来自关于 Active Record 关联的 Ruby on Rails 指南:

4.2.3 How To Know Whether There’s an Associated Object?

要知道是否存在关联对象,只需检查 association.nil?:

如果@supplier.account.nil?

@msg = "未找到此供应商的帐户"

结尾

http://guides.rubyonrails.org/association_basics.html#detailed-association-reference

于 2011-08-14T20:03:46.130 回答
0
Company.joins(:statuses).select("DISTINCT(companies.id), companies.*, statuses.*")
于 2011-08-14T20:37:34.793 回答
0

如果您有一个名为 Companies_statuses 的关联表:

检索具有至少一种状态的所有公司

Company.where("EXISTS (select 1 from companies_statuses where companies_statuses.company_id = companies.id)")

检索所有没有状态的公司

Company.where("NOT EXISTS (select 1 from companies_statuses where companies_statuses.company_id = companies.id)")
于 2013-09-28T21:44:40.467 回答