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。每个都有。。。而且它有效。不是食物类型。每个都有效