рельсы, вопрос именования моделей - PullRequest
1 голос
/ 14 ноября 2010

Я создаю модель под названием Чаты. И я хочу назначить пользователей для обсуждения. Они либо являются частью чатов, либо не являются ...

Итак, я создаю одну модель чатов.

Каково стандартное соглашение по именованию Rails для другой таблицы?

ChatUsers

Ответы [ 3 ]

8 голосов
/ 14 ноября 2010

Несмотря на то, что 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. Это ваш стол для присоединения.

Преимущества

Вы получаете модель, которая полностью находится под вашим контролем, а не просто тупая таблица соединений, управляемая рельсами. Например, если вы хотите отслеживать количество сообщений, оставленных конкретным пользователем в конкретном чате, это может быть столбец в таблице chat_sessions. Наличие :through делает habtm ненужным в большинстве случаев. Сложностей тоже нет.

5 голосов
/ 14 ноября 2010

Если это таблица соединения, то имена таблиц будут объединяться с помощью '_' и в алфавитном порядке имен таблиц:

chats_users
3 голосов
/ 14 ноября 2010

Это называется has_and_belongs_to_many ассоциацией в рельсах. В основном у вас есть две модели, которые вызывают 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...