【发布时间】:2016-06-11 16:54:29
【问题描述】:
我有一个使用 postgres 数据库的 rails 应用程序,我正在尝试添加一个功能,让 2 个用户可以直接互相聊天。我是用户模型和对话模型,它们通过has_and_belongs_to_many 关系相关联。我也有这个关系的联合表。
class CreateJoinTableUserConversation < ActiveRecord::Migration
def change
create_join_table :users, :conversations do |t|
end
end
end
我的目标是当一个用户点击链接与另一个用户聊天时,如果没有与这两个用户相关的对话对象,则创建一个。否则检索现有对话。如何使用活动记录或 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
【问题讨论】:
-
在我说出答案之前,您能否发布您的对话模型的架构?
-
当你这样做时请提及我,我会收到通知。谢谢!
-
@JoshDeeden 好的,我已经添加了架构和模型
标签: sql ruby-on-rails ruby postgresql rails-activerecord