【问题标题】:Overriding the way Integers print in .erb覆盖整数在 .erb 中的打印方式
【发布时间】:2012-10-25 02:55:16
【问题描述】:

我想在我的 rails 应用程序中用逗号打印数字。根据答案here,我可以用

包装我打印的每个数字
number_with_delimiter(@number, :delimiter => ',')

但是,我不想进入我的视图并手动应用它。我宁愿重写整数的打印方式。

在 java/jsp 中,<%= %> 标记内的任何内容都会获得 toString() 调用以评估页面上打印的内容,所以我认为覆盖 Integer 类的 to_s 方法可以:

class Integer
  def to_s
    number_with_delimiter(self, :delimiter => ',')
  end
end

不幸的是,这不起作用,因为使用<%=%> 标签打印的数字不会以逗号出现。 (不会引发错误。)

我怎样才能做到这一点? <%=%> 块不会自动调用给定对象上的 to_s 方法吗?它如何评估要打印的内容?

【问题讨论】:

    标签: ruby-on-rails erb


    【解决方案1】:

    你在修补错误的东西,你想修补 Fixnum。例如:

    >> class Fixnum
    >>   def to_s
    >>     'pancakes'
    >>     end
    >>   end
    => nil
    >> 1.to_s
    => "pancakes"
    

    对于 ERB:

    >> ERB.new('<%= 11 %>').result
    => "pancakes"
    

    也就是说,您的快捷方式(与大多数快捷方式一样)最终可能会在其他地方给您带来各种新的和有趣的问题。您最终会将'1,000' 发送到需要'1000' 的东西(例如数据库或客户端JavaScript 或...),您会得到一个令人困惑的嘶嘶声,适合您的工作。您还必须担心其他数字类,例如 FloatBignum

    修正你的观点,不要为自己的懒惰而纠缠。

    【讨论】:

    • 我希望有一个类可以运行/评估 ERB 文件。有没有办法在这种情况下对 Fixnum 进行修补?
    • @bdares:您可能能够围绕 ERB 打补丁和取消打补丁,但修复您的视图会更容易、更快且更不容易出错。以正确的方式做事通常是最快的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2017-09-18
    相关资源
    最近更新 更多