2016-01-04 2 views
0

Кажется, мне не хватает магии рубина на рельсах 4. Я хотел создать объект, который включает в себя ActiveModel::Model, но имя класса содержит два слова.`include ActiveModel :: Model` с именем класса, имеющим более двух слов

Поэтому я создал app/models/registration_form.rb со следующим кодом:

class RegistrationForm 
    include ActiveModel::Model 
    attr_accessor(:email) 
    validates :email, presence: true 
end 

Когда объект создается внутри контроллера с помощью RegistrationForm.new следующего сообщения об ошибке:

Could not find table 'registration_forms' 

Когда я просто удалить суффикс Form и переименуйте файл в app/models/registration.rb. Все работает отлично.

Когда код сверху выполнен в пределах rails console, все работает отлично.

StackTrace ошибки показывает, что ActiveRecord называется: https://gist.github.com/anonymous/273986937cd774b5953c

+0

Вы используете 'ActiveModel' или' ActiveRecord'? –

+0

оберните его в модуль и получите доступ к нему как 'Registration :: Form' –

+0

ActiveModel, я не знаю, почему вызывается ActiveRecord. Каков наилучший способ отладить это? – AlexN

ответ

0

Похоже, что вы пытаетесь инициализировать объект ActiveRecord в контроллере сторон. Это может быть просто столкновение имен. У вас есть другой файл, определяющий RegistrationForm как обычную модель ActiveRecord?

0

По умолчанию имени таблицы множественного числа от имени модели в змеином случае, так что если у вас есть модель GiantPanda имя таблицы в базе данных giant_pandas

Вы можете переопределить этот behavour, если ваше имя таблицы что-то остальное.

class RegistrationForm < ActiveRecord::Base 
    include ActiveModel::Model 
    self.table_name = "registrations" 
end