Ruby 在 Rails 上:列出与 belongs_to / has_many 关联的产品
Ruby on Rails: listing Products with belongs_to / has_many assosiation
我正在尝试使用用户、房间、产品构建 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
用户可以拥有许多产品,他们可以 join/leave 房间。
我想显示 current_user 的房间(其中有多个用户拥有多个产品)并列出该房间中所有用户的所有产品(并按 created_at描述)。你能帮我找到实现这个目标的好方法吗?
提前致谢!
您可以使用eager_load加载模型关联。这是开始 guide 了解 eager_load、包含和连接及其差异的良好开端。
现在您对您的用例使用以下查询。
result = current_user.eager_load(:rooms => [:users => :products ]).order("rooms.created_at DESC")
希望对您有所帮助。
我正在尝试使用用户、房间、产品构建 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
用户可以拥有许多产品,他们可以 join/leave 房间。
我想显示 current_user 的房间(其中有多个用户拥有多个产品)并列出该房间中所有用户的所有产品(并按 created_at描述)。你能帮我找到实现这个目标的好方法吗?
提前致谢!
您可以使用eager_load加载模型关联。这是开始 guide 了解 eager_load、包含和连接及其差异的良好开端。
现在您对您的用例使用以下查询。
result = current_user.eager_load(:rooms => [:users => :products ]).order("rooms.created_at DESC")
希望对您有所帮助。