【发布时间】:2014-09-30 15:46:54
【问题描述】:
谁能告诉我为什么会出现以下错误?
这是我的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 等等。)
【问题讨论】:
-
您确定在本地和 Heroku 上使用相同的 gem 版本吗?尝试使用 bundler 在本地运行,即
bundle exec rails server。 -
它在本地仍然运行良好,但您确实提醒我必须修改 gem 以避免实例变量与我的
states模型发生冲突。如何部署修改后的 gem? -
这是一个完全不同的问题。 :) 简短的回答是将源代码直接嵌入到您的 Rails 应用程序 (stackoverflow.com/questions/6800074/…) 中,或者在 Github 上 fork gem 并在您的
Gemfile中引用 fork。基本上,把它放在 Heroku 可以看到的地方。 -
@dpassage 的建议成功了:stackoverflow.com/questions/26124939/…
标签: ruby-on-rails activerecord heroku