2014-10-03 5 views
0

Эй, ребята, просто пытаются понять, почему это не работает. В основном это отношение имеетПроблема с рельсами принадлежит_

belongs_to :product_category, :foreign_key => :category_id 

И это делает сообщение не

belongs_to :category, :class_name => :product_category, :foreign_key => :category_id 

Ошибка "NameError: неинициализированным постоянный продукт :: PRODUCT_CATEGORY"

Почему? Благодаря!

ответ

2

Последний пример не работает, потому что нет класса под названием product_category. Вы предоставляете неправильное имя класса. Названия классов в Ruby должны быть написаны в CamelCase. Когда Rails ищет класс product_category, он не найдет его.

Ваш первый пример работает, потому что Rails указывает имя класса из имени отношения.

belongs_to :product_category, :foreign_key => :category_id 

Он преобразует product_category в ProductCategory. Вы можете сделать то же самое сами. Откройте терминал и введите следующее.

'product_category'.camelize.constantize 

Вы должны передать строку вместо:

belongs_to :category, :class_name => 'ProductCategory', :foreign_key => :category_id 

Но в этом случае было бы излишним, поскольку Rails уже можно вывести имя класса. Аргумент class_name следует использовать, когда имя класса не может быть выведено из имени отношения.

+0

Да, большое вам спасибо! –

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