ActionView :: Template :: Error(没有将String隐式转换为Integer)

时间:2014-09-30 15:46:55

标签: ruby-on-rails activerecord heroku

有人可以告诉我为什么我会收到以下错误吗?

这是我的states_controller.rb

def index
    @states = State.all
end

在index.html.erb中:

17 <form>
18    <select onchange="location = this.options[this.selectedIndex].value;">
19        <option>Select State…</option>
20    <% @states.each do |state| %>
21        <option value="<%= state.id %>">
22        <%= nytimes_state_name(state.name) %></option>
23    <% end %>
24 </select>
25 </form>

当我在本地运行它时工作正常,但一旦部署到Heroku,我收到以下错误:

ActionView::Template::Error (no implicit conversion of String into Integer)

当我删除nytimes_state_name方法时,它会正常运行,直到它到达下一个块:

46 <% @states.first(25).each do |state| %>
47 <li><%= link_to state.name.downcase + nytimes_state_abbrev(state.name), state %></li>>
48 <% end %>

然后我得到同样的错误。

同样,当我删除nytimes_state_abbrev方法时,它会正常工作,直到它到达下一个代码块,该代码块也会调用state.name并期望它是一个字符串。 (name值是邮政编码缩写 - CAAZTXNY,等等。)

1 个答案:

答案 0 :(得分:1)

关于为什么OP在他的本地版本和Heroku上看到不同行为的基本答案是因为他修改了他正在使用的一个宝石,并且这些修改在他部署时没有被推动。

解决方案是直接在您的Rails应用程序中嵌入gem的源代码,如this question,或者在Github上分叉gem并引用Gemfile中的fork。听起来他选择了前者,现在他的本地版本和Heroku之间存在一致的行为。