【问题标题】:Use active record in ruby gem在 ruby​​ gem 中使用活动记录
【发布时间】:2016-06-17 12:46:56
【问题描述】:

我正在开发一个 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 Product”时。它总是给我以下错误:

.../ruby/gems/2.3.0/gems/activesupport-4.2.4/lib/active_support/inflector/methods.rb:261:in `const_get': 错误的常量名称产品 (NameError)

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

【问题讨论】:

    标签: ruby-on-rails ruby rubygems


    【解决方案1】:

    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
    

    【讨论】:

    • 它有效。谢谢!这是我的第一颗宝石,您保存了一颗很棒的宝石! :-)
    猜你喜欢
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2011-07-22
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多