【问题标题】:ActionView::Template::Error (no implicit conversion of String into Integer)ActionView::Template::Error(没有将字符串隐式转换为整数)
【发布时间】: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 值是邮政编码的缩写——CAAZTXNY 等等。)

【问题讨论】:

  • 您确定在本地和 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


【解决方案1】:

关于为什么 OP 在他的本地构建和 Heroku 上看到不同行为的基本答案是因为他对他正在使用的其中一个 gem 进行了修改,而这些修改在他部署时没有被推送。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 2018-11-11
    • 2017-01-19
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多