我正在创建一个名为Chats的模型。我想为用户分配讨论。他们要么是聊天的一部分,要么他们不是......
所以我创建了一个模型聊天。
另一个表的标准Rails命名约定是什么?
ChatUsers?
答案 0 :(得分:8)
虽然此处has_and_belongs_to_many
是一个正常的选项,但我建议改为使用has_many :through
。
从本质上讲,您将拥有一个明确的连接模型,您可以将其称为ChatSession
。
class Chat < ActiveRecord::Base
has_many :chat_sessions
has_many :users, :through => :chat_sessions
end
class User < ActiveRecord::Base
has_many :chat_sessions
has_many :chats, :through => :chat_sessions
end
class ChatSession < ActiveRecord::Base
belongs_to :user
belongs_to :chat
end
现在,您需要一个名为chat_sessions
的表,其中包含列:user_id,以及:chat_id。这是你的联接表。
你得到一个完全由你控制的模型,而不仅仅是由rails管理的一个愚蠢的连接表。因此,例如,如果您想跟踪特定用户在特定聊天中留下的消息数,则可能是chat_sessions
表中的列。在大多数情况下,:through
的存在会导致habtm
不需要。也没有复杂性开销。
答案 1 :(得分:5)
如果它是一个连接表,它将是由'_'和表名的字母顺序连接的表名:
chats_users
答案 2 :(得分:3)
这在rails中称为has_and_belongs_to_many association。你基本上有两个模型调用has_and_belongs_to_many
并创建一个链接表,使用名称中的两个模型(字母和复数)。
模型:
class Chat < ActiveRecord::Base
has_and_belongs_to_many :users
end
class user < ActiveRecord::Base
has_and_belongs_to_many :chats
end
那么你的表就是