Я пытаюсь просмотреть свою таблицу, вытащить и перечислить каждый из типов статуса под отдельным заголовком. Когда я запускаю это, я получаю NoMethodError for Tickets # index с ошибкой чтения неопределенного метода status для nil: NilClass

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
0
Argent 2 Янв 2018 в 21:31

2 ответа

Лучший ответ

Вам необходимо удалить условие @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
jvillian 2 Янв 2018 в 18:50

Причина ошибки заключается в том, что не возвращается @tickets.

Эта строка вызывает ошибку

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

undefined method ... for nil:NilClass означает, что метод вызывается с нулевым значением, поэтому @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.

1
Rockwell Rice 2 Янв 2018 в 18:45