我有一个Message
模型,model users message in rails 3 question后面有user_id
和sender_id
个属性
我尝试根据“sender_id”
查询用户对话我做了这个
has_many :conversations, :class_name => 'Message', select: [:sender_id], group: [:sender_id]
但它只返回消息ID。
Message Load (0.8ms) SELECT sender_id FROM "messages" WHERE "messages"."user_id" = 1 GROUP BY sender_id
=> [#<Message sender_id: 500>]
使用了select
,因为似乎Postgres要求明确选择要分组的属性但是如果我明确地添加它们,我应该将它们添加到group子句中,这也是我不想要的。
知道如何检索按has_many
属性分组的sender_id
关联中的邮件吗?
答案 0 :(得分:1)
您应该将foreign_key
属性设置为列名sender_id
:
has_many :conversations, :class_name => 'Message', :foreign_key => 'sender_id'
编辑:好像你在where语句中尝试OR
两列,在这种情况下,关联是不合适的。
相反,在您的用户上放置一个将返回其conversations
class User < ActiveRecord::Base
...
def conversations
Message.where("user_id = ? OR sender_id = ?", id, id)
end
...
end
当然,您也可以为用户设置已发送和已接收的消息关联。