我在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_id
为current_user
或@message.recipient
或recipient_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
。我无法真正想到这一点,所以我将如何实现这一目标?
答案 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,也为接收者传递。