1

我有一个简单的应用程序,其中包含用户模型、角色模型、带有收件人的消息模型。一个用户通过角色有很多消息,一个角色通过收件人有很多消息,一个用户也通过收件人有很多消息。

接收者模型有一个 user_id、role_id 和 message_id

现在我想在一个查询中显示用户的所有消息,包括他的角色消息和他的个人消息。我怎样才能做到这一点。

 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

获取所有消息的一种方法是将 received_messages 数组与 all_messages 方法中的 private_messages 数组结合起来。这将返回一个包含所有用户消息的数组。

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