Почему я получаю ошибку неопределенного метода для nil: nilclass

Итак, я создаю это приложение для рельсов, и я смог добавить элементы в свое приложение, но теперь по какой-то причине я получаю ошибку, которую я указал в заголовке. Пожалуйста, помогите мне понять, что я делаю не так.

Ошибка:

<%= simple_form_for @attraction, :html => { :multipart => true} do |f| %>
  <%= f.select :category_id, @categories %>
  <%= f.input :name, label: "Name" %>
  <%= f.input :description %>
  <%= f.button :submit %>
<% end %>

это мой _form_html.erb для просмотра аттракционов:

<%= simple_form_for @attraction, :html => { :multipart => true} do |f| %>
  <%= f.select :category_id, @categories %>
  <%= f.input :name, label: "Name" %>
  <%= f.input :description %>
  <%= f.button :submit %>
<% end %>

это мои достопримечательности_controller_rb:

class AttractionsController < ApplicationController
  before_action :find_attraction, only: [:show, :edit, :update, :destroy]

  def index
    if params[:category].blank?
    @attractions = Attraction.all.order("created_at DESC")
    else
      @category_id = Category.find_by(name: params[:category]).id
      @attractions = Attraction.where(:category_id => @category_id).order("created_at DESC")
      end
  end

  def show
  end

  def new
    @attraction = current_user.attractions.build
    @categories = Category.all.map { |c| [c.name, c.id]}
  end

  def create
    @attraction = current_user.attractions.build(attraction_params)
    @attraction.category_id = params[:category_id]

    if @attraction.save
      redirect_to root_path
    else
      render 'new'
    end
  end


  def edit
    @categories = Category.all.map{ |c| [c.name, c.id]}
  end

  def destroy
    @attraction.destroy
    redirect_to root_path
  end


  def update
    @attraction.category_id = params[:category_id]
    if @attraction.update(attraction_params)
      redirect_to attraction_path(@attraction)
    else
      render 'edit'
    end

  end

  private
  def attraction_params
    params.require(:attraction).permit(:name, :description, :category_id)
  end

  def find_attraction
    @attraction = Attraction.find(params[:id])
  end

end

журнал сервера говорит следующее

app/views/attractions/_form.html.erb:2:in `block in _app_views_attractions__form_html_erb__1839715867_118778080'
app/views/attractions/_form.html.erb:1:in `_app_views_attractions__form_html_erb__1839715867_118778080'
app/views/attractions/new.html.erb:3:in `_app_views_attractions_new_html_erb___877453770_118816340'
app/controllers/attractions_controller.rb:28:in `create'
Started POST "/attractions" for 127.0.0.1 at 2018-03-30 00:09:05 -0500
Processing by AttractionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"qvSzpGt+j9VOv212Vmm+cKeAgGFJghY2ri9HyeVtydW4cYcwROKjAvpUUFfEHvsEojfS+XA0Dk6pbeQMeQWaPg= = ", "attraction"=>{"category_id"=>"2", "name"=>"klk", "description"=>"klk"}, "commit"=>"Create Attraction"}
  [1m[36mUser Load (1.0ms)[0m  [1m[34mSELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?[0m  [["id", 1], ["LIMIT", 1]]
  [1m[35m (0.0ms)[0m  [1m[36mbegin transaction[0m
  [1m[35m (0.0ms)[0m  [1m[31mrollback transaction[0m
  Rendering attractions/new.html.erb within layouts/application
  Rendered attractions/_form.html.erb (18.8ms)
  Rendered attractions/new.html.erb within layouts/application (35.9ms)
Completed 500 Internal Server Error in 130ms (ActiveRecord: 1.0ms)



ActionView::Template::Error (undefined method `empty?' for nil:NilClass):
    1: <%= simple_form_for @attraction, :html => { :multipart => true} do |f| %>
    2:   <%= f.select :category_id, @categories %>
    3:   <%= f.input :name, label: "Name" %>
    4:   <%= f.input :description %>
    5:   <%= f.button :submit %>

app/views/attractions/_form.html.erb:2:in `block in _app_views_attractions__form_html_erb__1839715867_121522240'
app/views/attractions/_form.html.erb:1:in `_app_views_attractions__form_html_erb__1839715867_121522240'
app/views/attractions/new.html.erb:3:in `_app_views_attractions_new_html_erb___877453770_121587180'
app/controllers/attractions_controller.rb:28:in `create'

пожалуйста, поделитесь контекстом / следом ошибки

Ganesh 30.03.2018 07:30

Что ты имеешь в виду?

Socramvm 30.03.2018 07:32

журнал вашего сервера, когда возникает ошибка

Ganesh 30.03.2018 07:33

Я опубликовал последние строки журнала своего сервера

Socramvm 30.03.2018 07:40

@GaneshNavale Я опубликовал журнал. Он работал правильно, но теперь его нет, любая помощь будет принята с благодарностью

Socramvm 30.03.2018 07:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
223
2

Ответы 2

В журнале говорится, что вы находитесь «в процессе создания» и визуализируете «новый» шаблон. Это означает, что ваш контроллер вызвал свой метод create. Этот метод не определяет @categories; следовательно, когда вы передаете его на f.select, он не может вызывать на нем empty?.

Добавьте назначение для @categories в свой метод create.

Итак, если добавить следующую строку в «def create» ?: @ Categories = Category.all.map {| c | [c.name, c.id]}

Socramvm 30.03.2018 15:29

Измените партиал следующим образом:

<%= simple_form_for @attraction, :html => { :multipart => true} do |f| %>
  <%= f.select :category_id, Category.all.map { |c| [c.name, c.id]} %>
  <%= f.input :name, label: "Name" %>
  <%= f.input :description %>
  <%= f.button :submit %>
<% end %>

и удалите присвоение переменной @categories из действия new и edit

Но если я это сделаю, не возникнут ли у меня другие ошибки?

Socramvm 30.03.2018 15:25

Теоретически HTML должен быть тупым, а контроллеры - тонкими. На практике включение интеллектуальной логики в HTML будет работать здесь лучше, потому что вам не понадобится назначение @categories в двух местах в контроллере. Так что давай и попробуй.

Phlip 30.03.2018 17:33

Другие вопросы по теме