我有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
这次谈话了。
以下是我的问题:
为什么user_conversations << message.conversation
不起作用,u1.sent_messages[0].conversation
呢?
在这种情况下进行对话的正确方法是什么?
感谢。
也许这样?
ids = current_user.sent_messages.pluck(:conversation_id)
Conversation.find(ids)
答案 0 :(得分:1)
我不知道,尝试重新加载控制台。也许你应该在方法的最后明确地返回user_conversations
。
您可以使用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 }