【发布时间】:2018-09-19 00:06:05
【问题描述】:
我有一个在两个用户之间运行的简单消息传递系统。
创建conversation 的用户获得了我可以通过User.find(sender_id).conversation.last 访问的记录,但是如果我尝试访问User.find(recipient_id).conversation.last,收件人将获得=> nil(我用实际ID替换了receiver_id和sender_id)。
但是,两个用户都会收到与对话相关的消息并可以聊天。我按照Dana Mulder on Medium的教程使用外键。我认为这很奇怪,因为我希望两个用户(接收者和发送者)都应该能够访问他们正在进行的对话的记录。有没有办法做到这一点?
我的模型:
用户.rb
has_many :conversations, :foreign_key => :sender_id, dependent: :destroy
has_many :messages, through: :conversations
Conversation.rb
belongs_to :sender, :foreign_key => :sender_id, class_name: 'User'
belongs_to :recipient, :foreign_key => :recipient_id, class_name: 'User'
has_many :messages, dependent: :destroy
Message.rb
belongs_to :conversation
belongs_to :user
对话控制器:
conversations_controller.rb
def create
if Conversation.between(params[:sender_id],params[:recipient_id]).present?
@conversation = Conversation.between(params[:sender_id], params[:recipient_id]).first
else
@conversation = Conversation.create!(conversation_params)
end
redirect_to conversation_messages_path(@conversation)
end
您知道如何让两个用户都能访问对话吗? (它可以访问,但不是我需要的方式)。
提前致谢!
【问题讨论】:
标签: ruby-on-rails activerecord associations