有人可以告诉我为什么我会收到以下错误吗?
这是我的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
值是邮政编码缩写 - CA
,AZ
,TX
,NY
,等等。)
答案 0 :(得分:1)
关于为什么OP在他的本地版本和Heroku上看到不同行为的基本答案是因为他修改了他正在使用的一个宝石,并且这些修改在他部署时没有被推动。
解决方案是直接在您的Rails应用程序中嵌入gem的源代码,如this question,或者在Github上分叉gem并引用Gemfile
中的fork。听起来他选择了前者,现在他的本地版本和Heroku之间存在一致的行为。