Я пытаюсь "отредактировать концерт" в моем приложении, но он выдает ошибку, что у концерта нет user_id. Создание нового концерта не проблема. Я чувствую, что это просто плохой синтаксис, я не посмотрел правильно, но понятия не имею. Я перепробовал все.
NoMethodError at /gigs/:id/edit
undefined method `user_id' for nil:NilClass
file: gigs_controller.rb location: block in <class:GigController> line: 43
Ниже мой Контроллер приложений, Gig Controller, схема и журнал. Спасибо!
APP CONTROLLER
require './config/environment'
class ApplicationController < Sinatra::Base
configure do
set :public_folder, 'public'
set :views, 'app/views'
enable :sessions
set :session_secret, "secret"
end
get '/' do
erb :welcome
end
get '/logout' do
session.clear
redirect to '/'
end
#helpers
helpers do
def logged_in?
!!current_user
end
def current_user
User.find_by_id(session[:user_id])
end
def is_authorized?(id)
current_user.id == id.to_i
end
end
end
GIG CONTROLLER
class GigController < ApplicationController
get '/gigs' do
if logged_in?
@gigs = Gig.all
erb :'/gigs/index'
else
redirect to '/signup'
end
end
get '/gigs/new' do
if logged_in?
@gigs = Gig.all
erb :'gigs/new'
else
redirect to '/login'
end
end
post '/gigs' do
if logged_in?
@gig = current_user.gigs.create(bands: params[:bands], location: params[:location], date: params[:date], time: params[:time])
"Event has been added."
redirect "/gigs"
else
"When creating a new Event, please provide Artists, a Location, a date and a time."
redirect '/gigs'
end
end
get '/gigs/:id' do
if logged_in?
@gig = Gig.find(params[:id])
erb :"gigs/show"
else
redirect '/login'
end
end
get '/gigs/:id/edit' do
if logged_in?
@gig = Gig.find(params[:id])
if current_user.id == @gig.user_id
erb :"gigs/edit"
else
"You are not authorized to edit this Event."
redirect to '/login'
end
end
end
end
SCHEMA-
ActiveRecord::Schema.define(version: 20200209173236) do
create_table "genres", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "gigs", force: :cascade do |t|
t.string "bands"
t.string "location"
t.date "date"
t.string "time"
t.integer "user_id"
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.string "password_digest"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
ERROR-
D, [2020-02-10T13:53:35.237402 #11377] DEBUG -- : ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
D, [2020-02-10T13:53:35.257906 #11377] DEBUG -- : User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 4]]
D, [2020-02-10T13:53:35.262209 #11377] DEBUG -- : Gig Load (0.1ms) SELECT "gigs".* FROM "gigs" WHERE "gigs"."id" = ? LIMIT 1 [["id", nil]]
2020-02-10 13:53:35 - ActiveRecord::RecordNotFound - Couldn't find Gig with 'id'=:
/Users/melc/.rvm/gems/ruby-2.6.1/gems/activerecord-4.2.11.1/lib/active_record/core.rb:155:in `find'
/Users/melc/nyc-shows/app/controllers/gigs_controller.rb:42:in `block in <class:GigController>'