Felix Felix - 7 months ago 10
Ruby Question

ruby on rails skip_before_action has no affect in my application

I want to use the before_action in application_controller.rb and then some

skip_before_action
s to prevent some sites from being called before a user is logged in.

But the defined function in my application_controller.erb is not called ...

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


The puts "HA" in
user_logged_in
is not printed in my server console. So I think the function is not called yet .. but why?

And in some controllers I tried to use this:

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


Thank you very much for your help.

enter image description here

Answer

You are trying to call through ActionController. Its not possible that way, as you built it.

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

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

To skip it, you have to inherit like below:

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

Controllers

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


# movies_controller.rb
class MoviesController < ApplicationController
end