[英]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.