在 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
我正在研究 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