Как получить записи на основе информации в записи Rails contains_to?

У меня 2 модели TourHdr и TourDetail. TourDetail принадлежит_туру_hdr, а TourHdr имеет_много_деталей_туров. TourHdr также имеет атрибут, называемый статусом.

Я хочу определить метод в TourDetail, который даст мне все TourDetails, где поле состояния в связанной записи TourHdr = Live.

Я пробовал следующее:

def self.status(status)
  where(:tour_hdr.status == status)
end

статус здесь может быть «Живой» или «Отмененный».

Rails жалуется на отсутствие метода tour_hdr для класса TourDetail. Какой здесь правильный синтаксис?

В консоли, если я сделаю:

td = TourDetail.first
puts td.tour_hdr.status

Это работает нормально. Я предполагаю, что это потому, что td является «Экземпляром» TourDetail, а не классом.


person nexar    schedule 04.04.2012    source источник


Ответы (1)


person    schedule
comment
Спасибо, Мик, сработало, но у тебя опечатка, которую я не могу исправить. Предложение where tour_hdr должно быть во множественном числе, то есть :tour_hdrs. Тогда это работает. У меня тоже есть признание. tour_hdr содержит только status_id, и я на самом деле хочу получить таблицу с именем tour_statuses, которая имеет атрибут statusdesc, где действительно находится «Live». Пожалуйста, не могли бы вы обновить свое описание, чтобы показать, как я могу добраться до tour_statuses.statusdesc. Спасибо еще раз. - person nexar; 04.04.2012
comment
Вы можете установить все ассоциации как joins(:tour_hdr => :tour_status).where(:tour_statuses => {:statusdesc => status}) - person mikdiet; 04.04.2012
comment
Спасибо БОЛЬШОЕ за это. Это прекрасно работает. Где в документации я могу найти это? - person nexar; 04.04.2012