Что мне делать, если я назвал Model в Rails 3 во множественном числе? - PullRequest
2 голосов
/ 31 марта 2011

Я создал модель под названием UserHasMessages, основанную на некоторых публикациях SO. Я думаю, что это создает некоторые проблемы для меня:

  • Как мне связать это с has_many? Должен ли я использовать has_many :user_has_messageses?

  • Как мне присоединиться? Я пробовал User.joins (: user_has_messages) и это печально: (

Вопрос:

Должен ли я как-то изменить имя на UserHasMessage, и если да, то как?

Если я буду во множественном числе, как мне справиться с этими случаями?

Ответы [ 3 ]

4 голосов
/ 31 марта 2011

Вы можете использовать тот же синтаксис, который вы используете с устаревшими таблицами:

class OtherClass < ActiveRecord::Base
  has_many :user_has_messages, :class_name => 'UserHasMessages'
end
3 голосов
/ 31 марта 2011

Вы можете добавить новую миграцию

rails g migration rename_user_has_messages

внутри вы пишете:

class RenameUserHasMessages < ActiveRecord::Migration
  def self.up
    rename_table :user_has_messages, :user_messages
  end

  def self.down
    rename_table :user_messages, :user_has_messages
  end
end

(таблица всегда во множественном числе)

Запустите миграцию.

Переименуйте ваш файл с user_has_messages.rb на user_message.rb и переименуйте ваш класс с UserHasMessages на UserMessage.

Готово:)

2 голосов
/ 31 марта 2011

Избегайте названий классов, которые заканчиваются на S, как дьявол избегает святой воды.Имя UserHasMessages - очень плохой выбор.Вы не создаете таблицу БД для проверки чего-либо.Вместо этого у вас есть модель User, модель Message и модель UserMessage.Затем, если вы хотите проверить пользовательские сообщения, вы просто создаете метод, который делает это.Ассоциация должна быть:

User has many messages through user_messages

, и вы будете получать сообщения пользователя, такие как current_user.messages.

Я настоятельно советую вам изменить свой дизайн на тот, который я описал :)

...