我想用逗号在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
方法?它如何评估要打印的内容?
答案 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或......),并且您会因此而感到困惑。您还必须担心其他数字类,例如Float
和Bignum
。
修复你的观点,不要在你自己的懒惰中徘徊。