与群体有很多关系

时间:2013-02-05 09:06:16

标签: ruby-on-rails

我有一个Message模型,model users message in rails 3 question后面有user_idsender_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关联中的邮件吗?

1 个答案:

答案 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

当然,您也可以为用户设置已发送和已接收的消息关联。