Ruby on rails Rails每个方法都有错误

Ruby on rails Rails每个方法都有错误,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我知道这个题目有问题,但没有一个能解决我的问题。因此,我想在application.html.erb中这样做: <% @food_types.each do |ft| %> <%= ft.name %> <%end%> class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For API

我知道这个题目有问题,但没有一个能解决我的问题。因此,我想在
application.html.erb
中这样做:

<% @food_types.each do |ft| %>
<%= ft.name %>
<%end%>
class ApplicationController < ActionController::Base    
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.

  protect_from_forgery with: :exception

  @food_types = FoodType.all
end
def food_types
  @food_types ||= FoodType.all
end

helper_method :food_types
下面是FoodTypes表的迁移

class CreateFoodTypes < ActiveRecord::Migration
  def change
    create_table :food_types do |t|
      t.string :name
      t.timestamps null: false
    end
  end
end
class CreateFoodTypes
我应该如何处理此错误<代码>未定义的方法each'for nil:NilClass`

尝试以下方法:

首先检查您是否有
食物类型
,然后重复:

在applicationController中:

before_action :set_food_types

def set_food_types
  @food_types = FoodType.all
end
然后,在application.html.erb中:

<% @food_types.each do |ft| %>
      <%= ft.name %>
 <% end %>

如果您希望所有控制器都能使用此功能,您应该在
应用程序\u controller.rb中执行类似操作:

<% @food_types.each do |ft| %>
<%= ft.name %>
<%end%>
class ApplicationController < ActionController::Base    
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.

  protect_from_forgery with: :exception

  @food_types = FoodType.all
end
def food_types
  @food_types ||= FoodType.all
end

helper_method :food_types
然后将
每个
循环更改为:

<% food_types.each do |ft| %>


我肯定有一些。我已经从控制台上查过了。最好的回答谢谢。但是有一个问题吗?既然我不做任何方法调用或任何事情,为什么我必须使用before_过滤器?你知道为什么吗?@HarunTuncay:你做的是“方法调用”。要查看您的食物类型,请在应用程序中打开一个页面。这是在你的应用程序中点击一个控制器。这构成“行动”。在执行操作之前,您需要一个
来设置该操作的辅助状态。正如@Sergio Tulentsev所说,您需要一个方法调用来为变量赋值,如果没有它,则无法为变量赋值。希望它能帮助您&如果它能解决您的问题,请接受它。您的应用程序\控制器在哪里?它是在一个helper方法中吗?你能发布你的整个应用程序吗?controllerIt是默认的应用程序。\u controller.rb。但是在这里你应该发布这个问题,而不是在comments中。它是从comments中提取出来的。嗯。它起作用了,但是如果我有多个变量,并且不希望所有变量都在同一时间被迭代呢?顺便说一句,谢谢。我认为在应用程序\u帮助程序中编写此方法更好。是的,它也可以在应用程序\u帮助程序中使用。和@HarunTuncay,如果你有很多东西显示在每个页面上,你可以将它们添加到帮助器或before过滤器中。我通常会记下它们,以防它们被多次调用。好吧,实际上这是一个教程。它们按照你说的方式放了3个变量。但是在一个方法中。(3个变量在“食物类型”方法中。)它们有@variable\u name。每个都有。。。而且它有效。不是食物类型。每个都有效