我有一个使用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
答案 0 :(得分:0)
您可以使用has_and_belongs_to_many
关系来代替has_many: through
关系。就像在会话模型中一样,这将为您提供联合表模型。以便您可以使用模型在联合表上执行查询。
但是您还需要在连接表中添加两个用户的外键。