在 ruby gem 中使用活动记录

Use active record in ruby gem

我正在研究 ruby gem,它可以用其他语言生成一些代码。 gem 需要在当前 rails 应用程序中加载模型。它被实现为一个接受一个参数的生成器——table 名称。在其中,以这种方式从 table 中读取列定义:

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

当我运行生成器'rails g mygen Product'。它总是给我以下错误:

.../ruby/gems/2.3.0/gems/activesupport-4.2.4/lib/active_support/inflector/methods.rb:261:in `const_get': wrong constant name products (NameError)

我该如何解决这个错误?或者是否有其他更好的方法(阅读 table 信息以生成一些代码)?

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