2016-06-17 4 views
0

Я работаю над рубиновой жемчужиной, которая может генерировать код на другом языке. Жемчуг должен загружать модели в текущее приложение rails. И он реализован как генератор, который принимает один параметр - имя таблицы. Внутри него, прочитать определение столбцов из этой таблицы следующим образом:Использовать активную запись в ruby ​​gem

tableklass = table_name.to_s.constantize # get the class name from table_name 
cols = tableklazz.columns # get columns definitions. 

При запуске генератора "Рельсы г mygen продукта. Он всегда давал мне ошибку ниже:

.../рубин/драгоценные камни/2.3.0/драгоценные камни/ActiveSupport-4.2.4/Библиотека/active_support/инфлектор/methods.rb: 261: в `const_get» : неправильные продукты с постоянным наименованием (NameError)

Как исправить эту ошибку? Или есть ли другой лучший способ сделать это (прочитать информацию о таблицах для генерации некоторого кода)?

ответ

2

constantize expects camelized ввод. Я не уверен, что происходит внутри вашего генератора, но похоже, что constantize в качестве параметра принимает products. Safest версия о том, что вы пытаетесь сделать:

table_name.to_s.singularize.camelize.constantize 

Все ниже будет работать:

:products.to_s.singularize.camelize.constantize 
:product.to_s.singularize.camelize.constantize 
'product'.to_s.singularize.camelize.constantize 
Product.to_s.singularize.camelize.constantize 
+0

Он работает. Спасибо! Это мой первый драгоценный камень, ты спас большой камень! :-) – douyw

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