我在控制器中定义了@categories
$users = Users::get();
$subset = $users->map(function ($user) {
return array_only(user, ['id', 'name', 'email']);
});
和new.html.erb
#MoviesController
def new
@movie = current_user.movies.build
@categories = Category.all.map {|c| [c.name, c.id] }
end
当我提交创建新电影时,我得到了一个错误的nil:NilClass未定义方法“ map”
在控制台中工作正常...
答案 0 :(得分:2)
提交表单时,导航器将发出一个新的HTTP请求(一个POST /movies
),该请求将引导您创建MoviesController
的方法。然后错误来自该方法。仔细检查您的create
方法。
此外,我们通常在create方法中执行以下操作:
def create
@movie = Movie.create(movie_params)
if @movie.save
redirect_to '/somewhere'
else
render :new
end
end
如果您是这种情况,那么您可能render :new
来自create方法。问题是new.html.erb
视图需要一个@categories
变量,如果您来自create
方法,则该变量未定义。要解决此问题,只需在@categories
方法内创建create
变量:
def create
@movie = Movie.create(movie_params)
if @movie.save
redirect_to '/somewhere'
else
@categories = Category.all.map {|c| [c.name, c.id] }
render :new
end
end
您的问题没有带来足够的背景信息,所以我希望我发现了正确的问题(这肯定是在movie#create方法中发生的,而不是在movie#new中发生);)