2017-01-11 21 views
0

Я пытаюсь создать приложение RoR с пользователями, комнатами, продуктами. Начнем с перечисления моих моделей ниже.Ruby on Rails: список продуктов с принадлежностью _to/has_many

class Product < ActiveRecord::Base 
belongs_to :user 
validates :name, :user_id, presence: true 
validates :price, numericality: { greater_than_or_equal_to: 0 }, presence: true 
end 

class User < ActiveRecord::Base 
has_many :products, dependent: :destroy 
has_many :memberships, dependent: :destroy 
has_many :rooms, through: :memberships 
<...> 
end 

class Room < ActiveRecord::Base 
has_many :memberships 
has_many :users, through: :memberships 
validates :name, presence: true, length: { in: 6..20 } 
end 

class Membership < ActiveRecord::Base 
belongs_to :user 
belongs_to :room 
validates :user_id, presence: true 
validates :room_id, presence: true 
end 

Пользователи могут иметь много продуктов, они могут входить/выходить из номеров.

I Мои взгляды Я хочу показать комнату current_user (у которой есть несколько пользователей, у которых есть несколько продуктов) и перечислить все Продукты всем пользователям, которые находятся в этой комнате (и сортировать по created_at DESC). Не могли бы вы помочь мне найти хороший способ достичь этого?

Заранее благодарен!

+0

Добро пожаловать в stackoverflow. В Интернете есть 100 уроков, показывающих, как это сделать, пожалуйста, посмотрите один из них, и если у вас есть конкретный вопрос, вы можете опубликовать его здесь. – Iceman

ответ

0

Вы можете использовать eager_load для загрузки ассоциаций модели. Это хорошо, начиная guide, чтобы понять eager_load, включает и объединяет и их отличия.

Теперь вы используете следующий запрос для своего использования.

result = current_user.eager_load(:rooms => [:users => :products ]).order("rooms.created_at DESC") 

Надеюсь, это поможет.

+0

Кажется, это то, что я искал. Спасибо, что пробовали. Сейчас я ищу eager_load. – Giedrius

+0

Я рад, что это сработало для вас, пожалуйста, примите этот ответ. – user3775217