2016-04-23 7 views
0

ich die before_action in application_controller.rb verwenden möchten, und dann einige skip_before_action s einige Websites zu verhindern, dass aufgerufen wird, bevor ein Benutzer angemeldet ist.Ruby on Rails skip_before_action hat nicht in meiner Anwendung beeinflussen

Aber die definierte Funktion in meinem application_controller.erb heißt nicht ...

application_controller.erb

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    layout "application" 

    before_action :user_logged_in, :set_locale 

    private 

    def set_locale 
    I18n.locale = params[:locale] || I18n.default_locale 
    end 

    # Prüft ob ein Nutzer eingeloggt ist. 
    def user_logged_in 

    puts "HA" 

    if session[:user_id].nil? 
     flash[:error] = "error" 
     redirect_to :controller => :startsites, :action => :index 
    else 
     flash[:error] = "ok" 
     redirect_to :controller => :startsites, :action => :index 
    end 

    end 
end 

Die puts "HA" in user_logged_in ist nicht in meinem Server Konsole ausgegeben. Also ich denke die Funktion wird noch nicht genannt. Aber warum?

Und in einigen Controllern habe ich versucht, diese zu nutzen:

class MoviesController < ActionController::Base 
    skip_before_action :user_logged_in, only: [:index, :show] 
also not working ... why? 

Ihnen sehr für Ihre Hilfe danken.

enter image description here

+2

try Änderung 'Klasse MoviesController 7urkm3n

+1

Wenn es geholfen hat, können Sie die Antwort thx akzeptieren. – 7urkm3n

Antwort

2

Sie versuchen, durch ActionController zu nennen. Es ist nicht möglich so, wie Sie es gebaut haben.

ActionController::Base 
    -ApplicationController #your method in this controller 

ActionController::Base 
    -MoviesController #yr trying to skip it right here 

es zu überspringen, müssen Sie wie unten erben:

ActionController::Base 
-ApplicationController #yr method is here 
    --MoviesController #it will find that method and skip it. 

Controller

# application_controller.rb 
class ApplicationController < ActionController::Base 
end 


# movies_controller.rb 
class MoviesController < ApplicationController 
end 
+0

vielen dank! – Felix