我正在尝试做一个 where 语句,它只显示具有该特定关联的结果。
例如:
一个公司通过公司状态有许多状态。他们可以有多种状态,可以是黄金、白银和/或青铜,或者根本没有。我试图让我的结果只返回具有状态(金、银和/或青铜)的公司,而不是那些没有状态的公司。
我正在尝试做一个 where 语句,它只显示具有该特定关联的结果。
例如:
一个公司通过公司状态有许多状态。他们可以有多种状态,可以是黄金、白银和/或青铜,或者根本没有。我试图让我的结果只返回具有状态(金、银和/或青铜)的公司,而不是那些没有状态的公司。
您的用例没有很好地表达,但我认为您想要的是找到状态与指定状态匹配的公司:
Company.includes(:statuses).where('status.name = ?', params[:status_name])
假设 Company ,那应该给你正确的查询has_many :statuses
。
来自关于 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
Company.joins(:statuses).select("DISTINCT(companies.id), companies.*, statuses.*")
如果您有一个名为 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)")