Ruby on Rails:列出具有belongs_to / has_many assosiation的产品

时间:2017-01-11 10:30:34

标签: ruby-on-rails has-many belongs-to

我正在尝试与用户,房间,产品一起构建RoR应用程序。 我将在下面列出我的模型。

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

用户可以拥有多种产品,他们可以加入/离开客房。

我的观点我希望显示current_user的会议室(其中有多个拥有多个产品的用户)并列出该会议室中所有用户的所有产品(并按created_at DESC排序)。你能帮我找到实现这个目标的好方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以使用eager_load加载模型关联。这是一个很好的开始guide来理解eager_load,包含和连接以及它们之间的区别。

现在您对您的用例使用以下查询。

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

希望这有帮助。