Rails ActiveRecord несколько уровней ассоциации

#mysql #ruby-on-rails #ruby-on-rails-3 #activerecord

#mysql #ruby-on-rails #ruby-on-rails-3 #activerecord

Вопрос:

У меня возникли небольшие проблемы с запросом нескольких таблиц с разными типами ассоциаций. Может кто-нибудь указать мне правильное направление?

 class Sale < ActiveRecord::Base
    has_many :items, :dependent => :destroy
end

class Item < ActiveRecord::Base
  belongs_to :sale, :dependent => :destroy
  has_many :images, :dependent => :destroy
end

class Image < ActiveRecord::Base
  belongs_to :item, :dependent => :destroy
end
  

Каким будет запрос, чтобы получить все товары, относящиеся к продаже, с идентификатором 1, а затем перебирать все изображения, относящиеся к каждому возвращенному товару?

Спасибо за вашу помощь.

Ответ №1:

Вы можете определить :through => :something в has_many ассоциации

 class Sale < ActiveRecord::Base
    has_many :items, :dependent => :destroy
    has_many :images, :through => :items
end
  

а затем просто запрос

 Sale.find(1).images
  

Комментарии:

1. Это создает некоторые проблемы, поскольку это не вернет изображения, относящиеся к элементу, который в данный момент находится в цикле (см. Приведенный Ниже Код) <h2>Items in Sale</h2> <% if @sale.items.length > 0 %> <% @sale.items.each do |item| %> <p style="float: left; margin: 0; padding-left: 10px;"> <% @sale.images do |image| %> <%= image_tag image.photo.url(:thumb) %> <% end %> <b>Title:</b> <%= item.title%> </p> <% end %> <% else %> <p>No items listen in this sale</p> <% end %> <div style="clear:both;"></div> Есть еще идеи?