2010-12-14 111 views
1

views/products/list.html.erb我使用:Ruby on Rails:为什么我的类扩展无法识别?

<%= product.power.power_in_kw.to_kw if ... %> 

to_kwlib/my_extensions.rb定义与其它方法一起:

class Symbol 
    def pluralize 
    to_s.pluralize.to_sym 
    end 
end 

class BigDecimal 
    def to_kw 
    number_to_currency(self, :unit => "kw", :format => "%n%u", :precision => 1) 
    end 
end 

class Float 
    def to_dollar 
    number_to_currency(self) 
    end 
end 

config/environment.rb在端部下面的行:

require 'my_extensions' 

然而,我出现以下错误:

undefined method `to_kw' for #<BigDecimal:2704620,'0.555E2',8(8)> 

我错过了什么?

+0

做多元化和浮动工作? – Cory 2010-12-14 13:22:53

+0

'pluralize'用于工作。然后我加了'to_kw'和'to_dollar',它开始失败。 – 2010-12-14 13:39:59

回答

1

你应该在你的BigDecimalFloatActionView::Helpers::NumberHelper

class BigDecimal 
    include ActionView::Helpers::NumberHelper 
    def to_kw 
    number_to_currency(self, :unit => "kw", :format => "%n%u", :precision => 1) 
    end 
end 

class Float 
    include ActionView::Helpers::NumberHelper 
    def to_dollar 
    number_to_currency(self) 
    end 
end 

我认为错误undefined method to_kw由未定义的方法number_to_currency引起的。

+0

即使这解决了眼前的问题,将7个实例方法添加到每个甚至不作用于相关实例的浮点数或bignumber看起来都不太可能:/此外,未定义的子方法doesn' t导致在回溯中未定义父方法的错误。 Ruby比这更聪明一点。 – Matchu 2010-12-16 00:20:05

+0

是的,如果我有这个问题,我会定义一个视图帮助器方法,而不是扩展这些类,但它超出了这个问题。此外,我想知道为什么错误说undefined'to_kw'而不是'number_to_currency',我还没弄明白。 – Kevin 2010-12-16 02:55:11

2

我知道自从您提交此文件以来,已经过了好几个小时了,但是一旦您重新启动应用程序,这些功能就可能起作用。 lib中的项目通常不会像app那样自动重新加载,因此在执行完全重新启动之前,所做的更改不会反映到应用程序中。

只是把它扔在那里:)

我还要指出的是,一旦你拥有了这些方法的建立和运行,他们可能不会立即工作。这是因为您的视图是在所有Rails视图助手的上下文中定义的,如ActionView::Helpers::NumberHelper,其定义了number_to_currency。然而,您在lib中的扩展未在此类上下文中定义,因此无法访问这些助手。

ActionView::Helpers::NumberHelper.number_to_currency可能更有可能按预期工作。

相关问题