在ruby gem中使用活动记录

时间:2016-06-17 12:46:56

标签: ruby-on-rails ruby rubygems

我正在研究一个可以用其他语言生成一些代码的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)

如何修复此错误?或者是否还有其他更好的方法(读表信息生成一些代码)?

1 个答案:

答案 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