rails,模型命名问题

时间:2010-11-14 04:11:24

标签: ruby-on-rails ruby-on-rails-3

我正在创建一个名为Chats的模型。我想为用户分配讨论。他们要么是聊天的一部分,要么他们不是......

所以我创建了一个模型聊天。

另一个表的标准Rails命名约定是什么?

ChatUsers?

3 个答案:

答案 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

那么你的表就是

  1. 聊天
  2. 用户
  3. chats_users