NoMethodError в / gigs /: id / edit - PullRequest
       26

NoMethodError в / gigs /: id / edit

1 голос
/ 10 февраля 2020

Я пытаюсь "отредактировать концерт" в моем приложении, но он выдает ошибку, что у концерта нет 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>'
...