覆盖整数在.erb中打印的方式

时间:2012-10-25 02:55:16

标签: ruby-on-rails erb

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

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

但是,我不想进入我的观点并手动应用。我更倾向于覆盖整数的打印方式。

在java / jsp中,<%= %>标记内的任何内容都会调用toString()来评估页面上打印的内容,因此我认为覆盖了to_s方法Integer 1}}类会做:

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

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

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

1 个答案:

答案 0 :(得分: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

修复你的观点,不要在你自己的懒惰中徘徊。