【问题标题】:Rails: Why is the "number_with_delimiter" method not recognized inside my model?Rails:为什么在我的模型中无法识别“number_with_delimiter”方法?
【发布时间】:2011-05-26 22:41:03
【问题描述】:

我有一个简单的验证:

class Product < ActiveRecord::Base
  # include ActionView::Helpers::NumberHelper
  ...
  validates_numericality_of :price, :less_than => 1000000, 
                            :message => "must be less than #{number_with_delimiter(1000000)}"                       
  ...
end

在此代码上,我收到以下错误:

undefined method `number_with_delimiter' for #<Class:0x2665a58>

我尝试添加:

include ActionView::Helpers::NumberHelper

但它没有帮助。

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails include number-with-delimiter


    【解决方案1】:

    这里真正的问题是您将这个模块包含在类中,而不是用它扩展类。

    不同之处在于,包含将使方法在实例上可用,而扩展将使它们在您尝试使用它们的地方:在类上。

    实例方法使用

    include ActionView::Helpers::NumberHelper
    

    类方法使用

    extend ActionView::Helpers::NumberHelper
    

    【讨论】:

    • @Ryan:我理解包含在类中相当于在这个类中定义我自己的方法,对吧?这是否意味着我可以使用 self.number_with_delimiter(...) ?当你把include放到类外面时,ActionView::Helpers::NumberHelper里面的所有方法都是全局的吗?
    • @Misha:是的,它们会成为全球性的,但这通常不是一个好主意(tm)。在这种情况下,最好的办法是 extend 带有模块的类。
    • @Ryan:如何使用NumberHelper 模块扩展Product 类?这不是我上面做的吗?
    • @Misha:不,你是include'ing 模块。 extend 不同。
    • @Ryan:我很困惑。在模型的类中包含模块正是我上面所做的,但它没有用。但是,当我将include 移到课堂外时,它起作用了。
    【解决方案2】:

    而不是扩展ActionView 模块。您可以改用 ActiveSupport 中的方法

    例如:

    ActiveSupport::NumberHelper::number_to_currency(10000.1234,{precision: 2,unit: ''})

    【讨论】:

    • 从内存使用的性能角度来看,这是否更好?
    【解决方案3】:

    你应该使用扩展:

    用法:extend ActionView::Helpers::NumberHelper

    对我有好处

    【讨论】:

      【解决方案4】:

      您可能缺少依赖项...您的应用程序可以访问 NumberHelper 类吗?

      查看official Rails docs

      【讨论】:

        【解决方案5】:

        好答案,使用:

        ActiveSupport::NumberHelper::number_to_delimited(number, options={})

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-19
          • 2020-09-04
          • 1970-01-01
          • 2015-07-30
          • 2020-05-28
          相关资源
          最近更新 更多