开发者

rails, model naming question

I'm creating a model cal开发者_如何学运维led Chats. And I want to assign users to a discussion. They are either a part of the Chats or they aren't...

So I create one model Chats.

What's the standard Rails naming convention for the other table?

ChatUsers?


While has_and_belongs_to_many is an ok option here, I recommend going with has_many :through instead.

In essence you will have an explicit join model, which you can call something like 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

Now you will need a table called chat_sessions with columns :user_id, and :chat_id in it. This is your join table.

Advantage

You get a model which is fully under your control, and isn't just a dumb join table managed by rails. So for example, if you want to track number of messages particular user left in particular chat, it could be a column in chat_sessions table. Presence of :through renders habtm unneeded in most cases. There is no complexity overhead either.


If it is a join table, it would be both table names joined by '_' and in alphabetical order of table names:

chats_users


This is called a has_and_belongs_to_many association in rails. You basically have two models that call has_and_belongs_to_many and create a linking table that uses the two models in the name (alphabetical and plural).

models:

class Chat < ActiveRecord::Base
  has_and_belongs_to_many :users
end

class user < ActiveRecord::Base
  has_and_belongs_to_many :chats
end

Then your tables would be

  1. chats
  2. users
  3. chats_users
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜