簡體   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