繁体   English   中英

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

[英]NoMethodError - undefined method `status' for nil:NilClass

我正在尝试浏览我的表,并在自己的标题下拉出并列出每个状态类型。 当我运行此程序时,我得到了Tickets#index的NoMethodError,并且读取了nil:NilClass的未读方法'status'的错误

index.html.erb

<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 %>

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

控制器:

 def index
    @tickets = Ticket.all

    if params[:filter_by]
        @tickets = Ticket.where(:category => params[:filter_by])
    else
        @tickets = Ticket.all
    end
end

您需要删除@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 %>

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

该行导致错误

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

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

您可以通过在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变量为空的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM