是什么导致nil:NilClass的未定义方法“ map”?

时间:2018-12-17 11:30:05

标签: ruby-on-rails ruby dictionary

我在控制器中定义了@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”

在控制台中工作正常...

1 个答案:

答案 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中发生);)