我正在尝试通过我的表并拉出并列出他们自己标题下的每个状态类型。当我运行这个时,我得到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 %>
答案 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
变量修复为空。