Как я могу показать только результаты, связанные с рельсами 3? - PullRequest
1 голос
/ 14 августа 2011

Я пытаюсь сделать утверждение where, которое выводит только результаты, имеющие эту конкретную связь.

Например:

Компания имеет много статусов через статусы компании. Они могут иметь несколько статусов, которые могут быть золотыми, серебряными и / или бронзовыми или вообще не иметь их. Я пытаюсь, чтобы мои результаты возвращали только те компании, которые имеют статус (золотой, серебряный и / или бронзовый), а не те, у которых нет статусов.

Ответы [ 4 ]

0 голосов
/ 29 сентября 2013

Если у вас есть ассоциативная таблица 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)")
0 голосов
/ 15 августа 2011

Из руководства по Ruby on Rails для ассоциаций Active Record:

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

Чтобы узнать, есть ли связанный объект, просто проверьте association.nil:

if @ supplier.account.nil?

@ msg = "Нет аккаунта для этого поставщика"

конец

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

0 голосов
/ 15 августа 2011
Company.joins(:statuses).select("DISTINCT(companies.id), companies.*, statuses.*")
0 голосов
/ 14 августа 2011

Ваш вариант использования не очень четко сформулирован, но я думаю , что вам нужно, это найти компании, которые имеют статус, который соответствует указанному:

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

Это должно дать вам правильный запрос, предполагая, что компания has_many :statuses.

...