2015-02-26 2 views
0

Я создал приложение Rails, в котором есть данные о Конгрессе США. У меня есть модель законодателя и модель Билла:Запрос активной записи для ассоциаций has_many/принадлежит_от

class Legislator < ActiveRecord::Base 
    has_many :bills 
end 

class Bill < ActiveRecord::Base 
    belongs_to :legislator 
end 

Так счета, что законодатель спонсируемый привязаны к этому законодателю. У законодателя также есть атрибут «сторона», который является либо «R», «D», либо «I»

Я хочу получить список всех законопроектов, которые были спонсированы всеми законодателями определенной стороны, например, все законопроекты, которые спонсировались демократом. Как выглядит этот запрос?

ответ

1

Регистрация и поставить запрос в виде хэша

Bill.joins(:legislator).where(legislators: {party: 'D'}) 
+0

Это дает мне ошибку '\t от bin/rai ls: 12: in '

'irb (main): 025: 0> Bill.joins (: законодатель). где (законодатель: {участник:' D '}) PG :: UndefinedTable: ERROR: отсутствует запись FROM-clause для таблицы «законодатель» LINE 1: ... lators "." id "=" bills "." lawsator_id "WHERE" законодательства ... ' ^ – user3809888

+0

ok Я думаю, потому что мне нужно сказать« законодатели: {party: 'D'} 'вместо' законодателя: {party: 'D'} '(отсутствующие' s') –

+0

Да, теперь это работает. Спасибо. – user3809888

2
Bill.joins(:legislator).where(legislators: {party: "I"}) 

Но я бы посоветовал вам написать областей на законодателя и Билл

# class Legislator 
scope :by_party, ->(party) do 
    where(party: party) 
end 

# class Bill 
scope :sponsored_by_party, ->(party) do 
    joins(:legislator).merge(Legislator.by_party(party)) 
end 

Тогда вы можете написать

Bill.sponsored_by_party("I") 
+0

Какой запрос генерируется, когда вы делаете это, присоединяется + слияние? –

+0

Поскольку я не на консоли, я должен подделать ее. Это должно быть «ВЫБЕРИТЕ векселя». * ОТ законопроектов INNER JOIN законодателей ON lawators.id = bills.legislator_id WHERE lawsators.party = 'I'; ' – messanjah

+0

поэтому активная запись поддерживает метод' .merge' на уровне отношений правильно? потому что я думал, что это будет слияние нескольких массивов, мне нужно будет прочитать об этом, спасибо +1 –

Смежные вопросы