2017-01-11 7 views
0

私は、ユーザー、ルーム、製品でRoRアプリケーションを構築しようとしています。 私のモデルは以下の通りです。Ruby on Rails:belongs_to/has_many assosiationの製品リスト

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で並べ替える)すべての製品を一覧表示したいと考えています。これを達成する良い方法を見つけるのを助けてくれますか?

ありがとうございます!

+0

ようこそstackoverflow。 Web上にチュートリアルの100があり、これを行う方法を示しています。そのうちの1つを見てください。特定の質問がある場合は、ここに投稿してください。 – Iceman

答えて

0

eager_loadを使用してモデルの関連付けをロードできます。これは、eager_load、インクルードと結合、およびそれらの相違点を理解するのに便利なguideです。

あなたの使用目的に次のクエリを使用しました。

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

希望します。

+0

それは私が探していたものだと思われます。提案していただきありがとうございます。私は今eager_loadを調べています。 – Giedrius

+0

私はあなたのために働いてうれしいです、この答えを受け入れてください。 – user3775217

関連する問題