如何获得current_user的对话?

时间:2017-11-08 10:14:07

标签: ruby-on-rails

我有3个型号如下:

模型

class Message < ApplicationRecord
  belongs_to :sender, class_name: "User"
  belongs_to :recipient, class_name: "User"
  belongs_to :conversation
end

class Conversation < ApplicationRecord
  has_many :messages
end


class User < ApplicationRecord
  has_many :recieved_messages, class_name: "Message", foreign_key: "recipient_id"
  has_many :sent_messages, class_name: "Message", foreign_key: "sender_id"
end

我在 user.rb

中尝试过此操作
 def get_user_conversations
    user_conversations = []

    self.recieved_messages.each do |message|
      user_conversations << message.conversation
    end

    self.sent_messages.each do |message|
      user_conversations << message.conversation
    end
  end

但我收到了消息而不是我想要的对话

我在rails console中尝试过:

u1 = User.first
u1.sent_messages[0].conversation

这次谈话了。

以下是我的问题:

  1. 为什么user_conversations << message.conversation不起作用,u1.sent_messages[0].conversation呢?

  2. 在这种情况下进行对话的正确方法是什么?

  3. 感谢。

    也许这样?

    ids = current_user.sent_messages.pluck(:conversation_id)
    
    Conversation.find(ids)
    

2 个答案:

答案 0 :(得分:1)

  1. 我不知道,尝试重新加载控制台。也许你应该在方法的最后明确地返回user_conversations

  2. 您可以使用Conversation.joins(:messages).where("messages.recipient_id = ? OR messages.sender_id = ?", current_user.id, current_user.id).distinct

答案 1 :(得分:0)

你试过这个吗?

all_conversations = current_user.sent_messages.map { |con| con.conversation }