1

ユーザーモデル、ロールモデル、メッセージモデルと受信者を備えたシンプルなアプリがあります。ユーザーは役割を介して多くのメッセージを持ち、役割は受信者を介して多くのメッセージを持ち、ユーザーも受信者を介して多くのメッセージを持ちます。

受信者モデルには user_id、role_id、および message_id があります

そして今、私は、役割メッセージと個人的なメッセージを含むユーザーのすべてのメッセージを 1 つのクエリで表示したいと考えています。どうすればこれを達成できますか。

 role model

 has_many :recipients
 has_many :received_messages, :class_name => 'Message', :order => 'created_at desc', through: :recipients

 user model
 has_many :roles
 has_many :received_messages, :class_name => 'Message', :order => 'created_at desc', through: :roles, :uniq => true
 has_many :recipients
 has_many :private_messages, :class_name => 'Message', :order => 'created_at desc', through: :recipients

 message model
 has_many :recipients
 has_many :roles, :through => :recipients
 has_many :users, :through => :recipients

これらすべてが整ったら、ロール メッセージとプライベート メッセージの両方のユーザー メッセージを取得する方法を教えてください。

def all_messages
  @all_messages = current_user.#all messages scope here#
end
4

1 に答える 1

1

すべてのメッセージを取得する 1 つの方法は、all_messages メソッドで received_messages の配列を private_messages の配列と組み合わせることです。これは、すべてのユーザーのメッセージの配列を返します。

def all_messages
  (current_user.received_messages + current_user.private_messages).uniq
end
于 2013-03-09T22:03:30.940 に答える