我正在研究一个可以用其他语言生成一些代码的ruby gem。 gem需要在当前rails应用程序中加载模型。它实现为一个接受一个参数的生成器 - 表名。在其中,以这种方式从该表中读取列定义:
tableklass = table_name.to_s.constantize # get the class name from table_name
cols = tableklazz.columns # get columns definitions.
当我运行发电机'rails g mygen产品'时。它总是给我下面的错误:
... / ruby / gems / 2.3.0 / gems / activesupport-4.2.4 / lib / active_support / inflector / methods.rb:261:在`const_get'中:错误的常量名称产品(NameError)
如何修复此错误?或者是否还有其他更好的方法(读表信息生成一些代码)?
答案 0 :(得分:2)
constantize
expects驼峰输入。我不确定,您的生成器中发生了什么,但看起来constantize
最终收到products
作为参数。你想要做的最安全的版本:
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