2016-04-25 20 views
1

Probleme haben immer Fehler undefinierte Methode `Pins 'für Nil: NilClass, kann jemand erklären, wie Sie diesen Fehler beheben. Ich habe ein Tutorial verfolgt und bin erst kürzlich stecken geblieben.Rails Anfänger NoMethodError in PinsController # neu


pins_controller.rb

class PinsController < ApplicationController 
    before_action :find_pin, only: [:show, :edit, :update, :destroy] 


    def index 
     @pins = Pin.all.order("created_at DESC") 
    end 

    def new 
     @pin = current_user.pins.build 
    end 


    def create 
     @pin = current_user.pins.build(pin_params) 

     if @pin.save 
      redirect_to @pin, notice: "Successfully created new Pin" 
     else 
      render 'new' 
     end 
    end 

    def edit 

    end 

    def update 
     if @pin.update(pin_params) 
      redirect_to @pin, notice: "Pin was Successfully updated!" 
     else 
      render 'edit' 
     end 
    end 


    def destroy 
     @pin.destroy 
     redirect_to root_path 
    end 


    private 

    def pin_params 
     params.require(:pin).permit(:title, :description) 
    end 

    def find_pin 
     @pin = Pin.find(params[:id]) 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_many :pins  
end 

pin.rb

class Pin < ActiveRecord::Base 
    belongs_to :user 
end 

routes.rb

Rails.application.routes.draw do 
    devise_for :users 
resources :pins 

root "pins#index" 
end 
+3

Ihr Fehler ist, weil 'current_user'' nil' zurückgibt. Überprüfen Sie diese Methode (wahrscheinlich in ApplicationController) –

+0

@PetrGazarov ich benutzte die Edelstein-Geräte und es kam mit current_user, nur zu fragen, was ich suchen sollte. –

+0

Woher hast du diesen Fehler, welche Zeile? – Lymuel

Antwort

1

Wenn Sie ersinnen verwenden, möchten Sie vielleicht before_action :authenitcate_user! Methode innerhalb Stifte Controller hinzufügen, die sicherstellt, dass der Benutzer angemeldet ist.

1

Wenn Sie Mit Hilfe des Gems Devise gibt Ihnen die Hilfsmethode current_user den aktuell angemeldeten Benutzer in Ihrer Sitzung zurück.

will sicherstellen, dass ein Benutzer in/

angemeldet ist, Sie können sicherstellen, dass der Benutzer durch das Hinzufügen before_action :authenitcate_user! in Ihrer Anwendung Controller angemeldet ist (für alle Aktionen in der Anwendung).

+0

Vielen Dank, ich war nicht angemeldet –

+0

Ehrfürchtig, ich könnte Ihnen helfen. – Alfie

Verwandte Themen