NoMethodError - nil的未定义方法`status':NilClass

时间:2018-01-02 18:31:40

标签: ruby-on-rails ruby-on-rails-4

我正在尝试通过我的表并拉出并列出他们自己标题下的每个状态类型。当我运行这个时,我得到Tickets #index的NoMethodError,错误读取nil的未定义方法`status':NilClass

index.html.erb

lockCanvas()

代码基本上重复其他状态类型。

控制器:

<h2>New<h2>
<% if @ticket.status == 'New' %>
    <% tickets.each do |ticket| %>
                    <p><%= link_to ticket_path(ticket) do %>
                        <strong><%= ticket.category %></strong>
                    <% end %></p>
                    <p><%= ticket.requestor_name %></p>
                    <p><%= ticket.requestor_lab %></p>
                    <p><%= ticket.contact %></p>
                    <p><%= ticket.requested_by %></p>
                    <%= ticket.status %>
    <% end %>
<% end %>

2 个答案:

答案 0 :(得分:1)

您需要删除@ticket条件。因为我们没有看到相同的定义并使用

<% if @tickets.any? %>
  <% @tickets.each do |ticket| %>
    <% if ticket.status.downcase == 'new' %>
      <p><%= link_to ticket_path(ticket) do %>
        <strong><%= ticket.category %></strong>
      <% end %></p>
      <p><%= ticket.requestor_name %></p>
      <p><%= ticket.requestor_lab %></p>
      <p><%= ticket.contact %></p>
      <p><%= ticket.requested_by %></p>
      <%= ticket.status %>
    <% end %>
  <% end %>
<% end %>

答案 1 :(得分:1)

导致错误的原因是没有返回@tickets

此行导致错误

<% if @ticket.status == 'New' %>

undefined method ... for nil:NilClass表示该方法是在nil值上调用的,因此@tickets目前为零。

您可以通过添加if语句周围值的检查来对此进行测试。

<h2>New<h2>
 <% if @tickets.any? %><!-- check for tickets first -->
  <% if @ticket.status == 'New' %>
    <% tickets.each do |ticket| %>
     <p><%= link_to ticket_path(ticket) do %>
       <strong><%= ticket.category %></strong>
     <% end %></p>
                <p><%= ticket.requestor_name %></p>
                <p><%= ticket.requestor_lab %></p>
                <p><%= ticket.contact %></p>
                <p><%= ticket.requested_by %></p>
                <%= ticket.status %>
  <% end %>
 <% end %><!-- remember to add another end -->
<% end %>

这应该可以消除错误,但不会将@ticket变量修复为空。