Итак, я создаю это приложение для рельсов, и я смог добавить элементы в свое приложение, но теперь по какой-то причине я получаю ошибку, которую я указал в заголовке. Пожалуйста, помогите мне понять, что я делаю не так.
Ошибка:
<%= 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'
Что ты имеешь в виду?
журнал вашего сервера, когда возникает ошибка
Я опубликовал последние строки журнала своего сервера
@GaneshNavale Я опубликовал журнал. Он работал правильно, но теперь его нет, любая помощь будет принята с благодарностью





В журнале говорится, что вы находитесь «в процессе создания» и визуализируете «новый» шаблон. Это означает, что ваш контроллер вызвал свой метод create. Этот метод не определяет @categories; следовательно, когда вы передаете его на f.select, он не может вызывать на нем empty?.
Добавьте назначение для @categories в свой метод create.
Итак, если добавить следующую строку в «def create» ?: @ Categories = Category.all.map {| c | [c.name, c.id]}
Измените партиал следующим образом:
<%= 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
Но если я это сделаю, не возникнут ли у меня другие ошибки?
Теоретически HTML должен быть тупым, а контроллеры - тонкими. На практике включение интеллектуальной логики в HTML будет работать здесь лучше, потому что вам не понадобится назначение @categories в двух местах в контроллере. Так что давай и попробуй.
пожалуйста, поделитесь контекстом / следом ошибки