Что вызывает неопределенный метод `map 'для nil: NilClass? - PullRequest
0 голосов
/ 17 декабря 2018

Я определил @categories в контроллере

#MoviesController
def new
    @movie = current_user.movies.build
    @categories = Category.all.map {|c| [c.name, c.id] }
  end

и в new.html.erb

<%= simple_form_for @movie do |f| %>
  <%= select_tag(:category_id, options_for_select(@categories), prompt: "Select a Category") %>
  <%= f.input :name %>
  <%= f.input :director %>
  <%= f.input :description %>
  <%= f.button :submit %>
<% end %>

Когда я отправляю создать новый фильм, я получаю сообщение об ошибке неопределенного метода `map'для nil: NilClass

В консоли все работает нормально ...

1 Ответ

0 голосов
/ 17 декабря 2018

Когда вы отправляете форму, навигатор отправляет новый HTTP-запрос (POST /movies), который приведет вас к методу создания вашего MoviesController.Тогда ошибка исходит из этого метода.Дважды проверьте ваш create метод.

Кроме того, мы обычно делаем что-то подобное в методе создания:

def create
  @movie = Movie.new(movie_params)

  if @movie.save
    redirect_to '/somewhere'
  else
    render :new
  end
end

Если это так, то вы можете render :new из метода создания.Дело в том, что для представления new.html.erb требуется переменная @categories, которая не определяется, если вы исходите из метода create.Чтобы это исправить, просто создайте переменную @categories в методе create:

def create
  @movie = Movie.new(movie_params)

  if @movie.save
    redirect_to '/somewhere'
  else
    @categories = Category.all.map { |c| [c.name, c.id] }
    render :new
  end
end

Ваш вопрос не дает достаточного контекста, поэтому я надеюсь, что я нашел правильную проблему (которая наверняка происходит)в фильмах # метод создания, а не фильмы # новый);)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...