0

Rails 3の質問のモデルユーザーメッセージに続く属性を持つMessageモデルが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 がグループ化する属性を明示的に選択する必要があるように思われるためですが、それらを明示的に追加する場合は、グループ句にも追加する必要がありますが、これは望ましくありません。

属性has_manyでグループ化された関連付けでメッセージを取得する方法はありますか?sender_id

4

1 に答える 1

1

foreign_key列名に属性を設定する必要がありますsender_id

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

編集: where ステートメントで 2 つの列を使用しようとしているようです。ORこの場合、関連付けは適切ではありません。

代わりに、ユーザーにメソッドを配置して、conversations

class User < ActiveRecord::Base

  ...

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

  ...

end

もちろん、ユーザーの送受信メッセージの関連付けを設定することもできます。

于 2013-02-05T09:20:18.923 に答える