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