2009-11-29 49 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时会发生什么。