rails association,检索2个用户之间的对话

时间:2016-02-28 18:04:12

标签: sql ruby-on-rails ruby postgresql rails-activerecord

我有一个使用postgres数据库的rails应用程序,我试图添加一个功能,其中2个用户可以直接相互聊天。我是一个用户模型和会话模型,它们与has_and_belongs_to_many关系相关。我也有这种关系的联合表。

class CreateJoinTableUserConversation < ActiveRecord::Migration
  def change
    create_join_table :users, :conversations do |t|
    end
  end
end

我的目标是当用户点击链接与其他用户聊天时,如果没有与这2个用户相关的会话对象,则创建一个。否则检索现有会话。如何使用活动记录或SQL调用来执行此操作?我不想迭代所有对话,并检查这两个用户是否在conversation.users,因为当有很多对话时,这将永远需要。有没有办法访问联合表以某种方式检索有2个特定用户与之关联的对话记录?

修改

这是架构中的表格。

  create_table "conversations", force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

以下是模型:

    class Conversation < ActiveRecord::Base
      has_and_belongs_to_many :users
    end

    class User < ActiveRecord::Base
      has_and_belongs_to_many :conversations
    end

1 个答案:

答案 0 :(得分:0)

您可以使用has_and_belongs_to_many关系来代替has_many: through关系。就像在会话模型中一样,这将为您提供联合表模型。以便您可以使用模型在联合表上执行查询。

但是您还需要在连接表中添加两个用户的外键。