2009-11-29 40 views
1

所以在我的本地應用程序中,一切都很好。未定義的方法`reduce'

兩者都運行Ruby 1.8.7和Rails 2.3.5,但是我部署的應用程序出現以下錯誤。

ActionView::TemplateError (undefined method `reduce' for #<Class:0x7fbbd034d760>) 

我能想到的唯一區別是操作系統,我正在使用OS X並部署到Linux。

雖然這並不是真的。在reduce工作方式有所不同的時候,在網上找不到任何東西。

任何想法,我可以如何調試?

更新

出於好奇,我已經更新的ActiveSupport寶石2.3.5(的ActiveSupport-2.3.5),並且似乎沒有工作。

這是在得到錯誤的看法行:

<%= quote.quote_line_items.reduce(0) {|sum, item| sum + item[:list_price].to_f } %> 

回答

3

檢查你的部署紅寶石版本。減少直到1.8.7才被添加到Enumerable。你也可以嘗試使用注入。這與減少相同,只是名稱不太明顯。

+0

你是對的......爲什麼不'減少'工作,我轉而注射,而且工作。 – 2009-11-29 03:22:45

+1

在1.8.6中,只有注入。在1.8.7和1.9中,他們增加了reduce作爲別名,可能是因爲這就是它在很多其他語言中所稱的。 – 2009-11-29 03:43:14

1

reduceinject的同義詞。所以你應該把它改成inject

1

如果你想要運行多個版本的Ruby,或者只是想在不同的版本上嘗試一下,看看你可以嘗試rvm。

sudo gem install rvm 
rvm install 1.8.7 
rvm install 1.9.1 
rvm use 1.9.1 

這將設置默認紅寶石爲1.9.1紅寶石和所有紅寶石相關的程序,如irb。然後你可以很容易地推斷出它是否僅僅是一個1.8.6 - > 1.8.7的東西,或者它是否更大。

當你的服務器被鎖定到1.8.6時非常方便,但你想看看1.8.7甚至1.9時會發生什麼。