在我的index.html.erb
文件中,这么多代码可以运行:
<% if Restaurant.all.any? %>
<% Restaurant.all.each do |restaurant| %>
<h2><%= restaurant.name %></h2>
<% end %>
<% else %>
<h1>No restaurants yet!</h1>
<% end %>
<a href='#'>Add a restaurant</a>
但是,当我将控制器更改为:
class RestaurantsController < ApplicationController
def index
@restaurants = Restaurant.all
end
end
和index.html.erb
文件:
<% if @restaurants.any? %>
<% @restaurants.each do |restaurant| %>
<h2><%= restaurant.name %></h2>
<% end %>
<% else %>
<h1>No restaurants yet!</h1>
<% end %>
<a href='#'>Add a restaurant</a>
所有通过的测试,现在都因为这种变化而失败了,我不能为我的生活找出原因,为什么他们不工作。运行测试时的错误消息是:
Failure/Error: visit '/restaurants'
ActionView::Template::Error:
undefined method `any?' for nil:NilClass
我的routes.rb文件如下:
Rails.application.routes.draw do
resources :restaurants
end
答案 0 :(得分:1)
实际上问题是您的索引是直接调用的,无需转到控制器。因此,"Restaurant.all"
之前的工作正常,但现在推断新的更改@restuanants
为空,并且您应用了null.any?
。它给出了错误。
尝试
<% if @restaurants && @restaurants.any? %>
或
<% unless @restaurants.blank? %>
答案 1 :(得分:1)
试试这个我希望这会有所帮助
在 index.html.erb
中<% unless @restaurants.blank? %>
<% @restaurants.each do |restaurant| %>
<h2><%= restaurant.name %></h2>
<% end %>
<% else %>
<h1>No restaurants yet!</h1>
<% end %>
<a href='#'>Add a restaurant</a>