Felix
Felix

Reputation: 5619

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_actions 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

Upvotes: 0

Views: 583

Answers (1)

7urkm3n
7urkm3n

Reputation: 6311

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

Upvotes: 2

Related Questions