Последний пример не работает, потому что нет класса под названием 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
следует использовать, когда имя класса не может быть выведено из имени отношения.
Да, большое вам спасибо! –