2

У меня есть следующий код:Почему возникает ошибка «неинициализированная константа»?

class Zombie < ActiveRecord::Base 
    attr_accessible :name, :rotting, :age 
    has_many :assignments 
    has_many :roles, through: :assignments 
end 

class Role < ActiveRecord::Base 
    attr_accessible :title 
    has_many :assignments 
    has_many :zombies, through: :assignments 
end 

class Assignments < ActiveRecord::Base 
    attr_accessible :role_id, :zombie_id 
    belongs_to :zombie 
    belongs_to :role 
end 

В консоли, когда я пытаюсь запустить этот код:

zombie = Zombie.first 
role = Role.first 
zombie.assignments.create(role: role) 

Я получаю следующее сообщение об ошибке:

NameError: uninitialized constant Zombie::Assignment. 

я допустили какие-то ошибки?

ответ

0

Попробуйте запустить следующий код на консоли

zombie = Zombie.first 
zombie.roles << Role.find_by_title("Title") 
zombie.roles 
+0

Это решение заставляет его работать, но не решает проблему. Модели рельсов сингулярны, рассмотрите возможность изменения 'Assignments' на' Assignment' –

4

Модели рельсов являются единственными, поэтому измените название класса Assignments на Assignment.

+0

теперь я получаю эту ошибку ActiveModel :: MassAssignmentSecurity :: Ошибка: Не удается массово правопреемником защищенные атрибуты: роль –

+1

только attr_accessible атрибуты массово присвоены , В вашем случае роль не определена в attr_accessible. Лучше использовать «zombie.assignments.create (role_id: role)», также рельсы создают role_id, а zombie_id - как attr_accessible, когда вы определяете ** has_many через. ** Поэтому «attr_accessible: role_id,: zombie_id» не требуется. – Tukuna

Смежные вопросы