Ruby / Rails - модели, названные двумя словами (вопросы соглашения об именах) - PullRequest
33 голосов
/ 04 февраля 2011

Это действительно вопрос соглашений об именах.

У меня есть модель с именем PromotedEvents

Файл называется promoted_events.rb

Я создал таблицу с помощью:

create_table :promoted_events do |t|

Теперь у меня проблемы с созданием чего-либо, поэтому мне интересно, есть ли проблемы с использованием модели с двумя словами

im в консоли и попытался

a = PromotedEvents.new

a = Promoted_Event.new

a = promoted_event.new

и продолжаю получать nameerror : uninitialized constant ошибку

Есть идеи?

Ответы [ 4 ]

51 голосов
/ 04 февраля 2011

Ваш класс должен быть в единственном числе.

Назовите его PromotedEvent в файле promoted_event.rb

a = PromotedEvent.new
21 голосов
/ 04 февраля 2011

Названия моделей в единственном числе и верблюжий регистр, например, pe = PromotedEvent.new()

файл должен быть promoted_event.rb

Контроллеры множественного числа

PromotedEventsController

константы ALL_CAPS

локальные separated_by_underscores_and_lowercase

имена таблиц множественного числа 'SELECT * FROM promooted_events`

10 голосов
/ 04 февраля 2011

Если это помогает, я всегда думаю об этом так:

Название модели в единственном числе, потому что оно представляет одну, специфическую вещь. Итак, PromotedEvent - это конкретное продвигаемое событие, которое имеет имя, дату и т. Д.

Название таблицы с другой стороны - множественное число. Это связано с тем, что в таблице хранится коллекция этих уникальных предметов. Итак, promooted_events.

В rails имена файлов являются в основном условными, поскольку в ruby ​​есть довольно слабые правила в этом отношении, но обычно это class_name.rb. Эта страница может помочь вам лучше понять, какие соглашения используются, где и что характерно для Ruby и Rails.

1 голос
/ 29 апреля 2011

Если вы экстремальный рельс n00b, как я, то вам не забудьте создать определение класса для вновь созданной таблицы и поместить его в приложение / модели.

Это будет похоже на

class LargeCat < ActiveRecord::Base
    belongs_to :zoo
end
...