Как распечатать все элементы, принадлежащие этой таблице

Хорошо, я не уверен, что мой заголовок был достаточно ясен, но я попытаюсь объяснить

У меня есть две таблицы: заказы, в которых есть_много элементов, и элементы, которые принадлежат к заказам. Я только начал изучать RoR и застрял на простой задаче. Все, что я хочу, это отображать заказы и связанные с ними элементы следующим образом:

Заказ 1:
Элемент 1
Элемент 2

Заказ 2:
Элемент 1
Элемент 2
...

Я знаю, как отображать заказы или товары отдельно, я знаю, как отображать заказы товаров (item.order.id), но как отображать заказы и товары в таблице, как указано выше? В шаблоне, где я отображаю заказы, я мог бы просматривать каждый элемент на каждой итерации и сравнивать его чужой order_id с order.id, но это было бы неудобно. Я предполагаю, что я должен поместить элементы в какой-то многомерный хэш, где ключом будет order_id, а затем я мог бы просто сослаться на этот хеш по идентификатору заказа и получить в нем все элементы, но я не уверен, что это правильно.

Надеюсь, то, что я здесь написал, понятно.


person Arty    schedule 04.07.2010    source источник


Ответы (1)


Когда вы определяете отношение has_many, вы автоматически получаете методы для запроса этих объектов. В этом случае метод order.items.

Итак, вы можете сделать:

Order.find_each do |order|
  puts "Order #{order.id}:"
  order.items.each do |item|
    puts "Item #{item.id}"
  end
end

(Я использовал метод find_each, который доступен в Rails 2.3+. Вы можете используйте простой Order.all.each однако.

person Chubas    schedule 04.07.2010
comment
Отлично, спасибо! Но если я захочу использовать его в шаблоне, это не сработает, верно? Он говорит, что неопределенный метод «элементы». - person Arty; 05.07.2010
comment
Это должно работать, если вы правильно вызываете объект типа Order. Как именно вы называете это в своем представлении? - person Chubas; 05.07.2010
comment
‹% Заказать.все.каждый сделать |заказать| %› - person Arty; 05.07.2010
comment
Ладно, я понял. Оно работает. Должно было быть «предмет», а не «предмет». Большое спасибо! - person Arty; 05.07.2010