has_many: через и получение связанных элементов - PullRequest
1 голос
/ 23 сентября 2011

Это продолжение вопроса has_many: простой вопрос, вопрос для начинающих

По сути, я хотел бы иметь функцию в своем классе Invoice, которая получает все LineItems, но следующее не работает:

так:

> @i=Invoice.find(1)      # good   
> @i.products             # good works well  
> @i.products.line_items  # not working, undefined method line_items  

на основании ассоциаций в предыдущем вопросе, должно ли это работать? Я думаю, что должен, если я получу доступ к продуктам напрямую:

> @p=Product.find(1)      # good  
> @p.line_items           # also good

Как мне вернуть все позиции, основанные на этой модели?

ТНХ

Ответы [ 2 ]

3 голосов
/ 24 сентября 2011

Если у вас есть следующие модели:

class Invoice
  has_many :line_items
  has_many :products, :through => :line_items
end

class LineItems
  belongs_to :invoice
  belongs_to :product
end

class Product
  has_many :line_items
  has_many :invoices, :through => :line_items
end

Вы можете сделать следующее:

@i=Invoice.find (1) # хорошо
@ i.products # хорошо работает
@ i.line_items # все элементы line_items, связанные со счетом.

1 голос
/ 23 сентября 2011

@i.products возвращает коллекцию Product с.Вам нужно собрать все позиции:

    @i.products.collect(&:line_items)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...