0

在rails 3问题中Message有一个模型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

4

1 回答 1

1

您应该将foreign_key属性设置为列名称sender_id

has_many :conversations, :class_name => 'Message', :foreign_key => 'sender_id'

编辑:似乎您正在尝试ORwhere 语句中的两列,在这种情况下关联不合适。

相反,在您的用户上放置一个方法,该方法将返回他们的conversations

class User < ActiveRecord::Base

  ...

  def conversations
    Message.where("user_id = ? OR sender_id = ?", id, id)
  end

  ...

end

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

于 2013-02-05T09:20:18.923 回答