【问题标题】:undefined method `each' for nil:NilClassnil:NilClass 的未定义方法“每个”
【发布时间】:2016-02-12 05:41:04
【问题描述】:

我正在创建一个使用 ERB 作为模板的 rails 应用程序并不断收到此错误:undefined method 'each' for nil:NilClass

我的 event.html.erb 看起来像:

        <% @event.each do |event| %>
            <a href="/registrations/new?level_id=1" class="btn"><%= event.date.strftime("%B %d %Y") %></a>
            <br /><br />
        <% end %>

我的 register_controller.rb 看起来像这样:

class RegisterController < ApplicationController
    def index
        @event = Event.all
    end 
end

def event
    @event = Event.find_by id: params["id"]
end 

我的 event.rb 模型:

class Event < ActiveRecord::Base
end

我的路线是这样的:get 'register/event/:id' =&gt; 'register#event'

当我转到 /register/event/1/ 时,我收到错误消息 undefined method 'each' for nil:NilClass。任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 除非你有猴子补丁find_by,否则如果找到记录,@event 上不会有 each 可用
  • 也应该看看params['id'],也许params[:id]

标签: ruby-on-rails ruby


【解决方案1】:

您正在尝试迭代单个对象。您的 event.html.erb 文件应该看起来像:

   <a href="/registrations/new?level_id=1" class="btn">
     <%= @event.date.strftime("%B %d %Y") %>
   </a>

此外,您指定的params[:id] 似乎数据库中没有对象

还有你的控制器,应该是这样的:

class RegisterController < ApplicationController
    def index
        @event = Event.all
    end 

    def event
       @event = Event.find_by id: params[:id]
    end
end

【讨论】:

  • 然后在undefined method 'date' for nil:NilClass上抱怨
  • @TreyCopeland 您需要确保记录存在指定的params["id"]
  • @aliibrahim 感谢您的跟进。我已编辑以显示 mysql 结构。查看我的原始帖子,它包含 id 和日期。
  • @TreyCopeland 在你的控制器中,你能把@event = Event.find_by id: params["id"] 改成@event = Event.find_by id: params[:id]
  • 同样的问题,抱怨日期
【解决方案2】:

看起来您是在要求它迭代单个实例。

可以搭配:

<a href="/registrations/new?level_id=1" class="btn">
  <%= @event.date.strftime("%B %d %Y") if @event %>
</a>
<br /><br />

event.html.erb

【讨论】:

  • trey,看看我在哪里有if @event
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多