2010-12-14 66 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可能更有可能按預期工作。

相關問題