如何显示当前用户与其他用户之间的所有消息?

时间:2015-10-31 01:30:47

标签: ruby-on-rails ruby ruby-on-rails-4

我在Rails中使用子句变得越来越好但我遇到了问题。我有以下模型设置:

class Message < ActiveRecord::Base
  belongs_to :user
  belongs_to :recipient, class_name: 'User'
end

class CreateMessages < ActiveRecord::Migration
  def change
    create_table :messages do |t|
      t.integer :user_id
      t.integer :recipient_id

      t.timestamps null: false
    end
  end
end

在我的控制器中,我正在尝试显示user_idcurrent_user@message.recipientrecipient_id为{{1}的消息列表}或current user。这基本上意味着,我想在当前用户和另一个用户之间显示消息,无论当前用户是发送还是接收它。

@message.recipient

但上述内容不起作用或在声明中使用 def show @message = Message.find(params[:id]) @messages = Message.all.where('user_id IN (?) AND recipient_id IN (?)', @message.recipient_id, @message.recipient_id) end 。我无法真正想到这一点,所以我将如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

您的SQL搜索

@messages = Message.all.where('user_id IN (?) AND recipient_id IN (?)', @message.recipient_id, @message.recipient_id)

您的用户和收件人ID都使用收件人ID。它应该是

@messages = Message.all.where('user_id IN (?) AND recipient_id IN (?)', @message.user_id, @message.recipient_id)

你也可以这样做:

current_user.messages.where(recipient_id: @recipient.id)

@recipient.messages.where(user_id: @user.id)

编辑:

要获得两个方向,您可以尝试:(未经测试)

@messages = Message.all.where('user_id IN (?) AND recipient_id IN (?)', [@message.user_id, @message.recipient_id], [@message.user_id, @message.recipient_id])

IN接受数组,因此您可以为用户传入两个ID,也为接收者传递。