Ruby on Rails,控制器似乎没有链接到视图

时间:2015-06-03 11:00:29

标签: ruby-on-rails ruby

在我的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

2 个答案:

答案 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>