Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does before_action returning false do in Rails 4?

I am reading the "Agile Web Development with Rails 4", on pag. 338 it says:

[...] Callbacks can be passive, monitoring activity performed by a controller. They can also take a more active part in request handling. If a before action callback returns false, then processing of the callback chain terminates, and the action is not run. [...]

Now my doubt is the following: here how to execute an action if the before_action returns false it was told that the goal of the before_action is to prepare something before the action is executed, if it returns false it doesn't mean that the action is not run, but according the book it is right so...so I am getting a little bit confused.

If I'm trying the following

class ProductsController < ApplicationController
before_action :test

  def index
    @products = Product.all
  end


  private

    def test
      return false
    end
end

But the action is executed, when I call /products I do not get any error and the page shows up just fine

like image 225
zer0uno Avatar asked Dec 17 '13 00:12

zer0uno


People also ask

What does Before_action do in Rails?

When writing controllers in Ruby on rails, using before_action (used to be called before_filter in earlier versions) is your bread-and-butter for structuring your business logic in a useful way. It's what you want to use to "prepare" the data necessary before the action executes.

What does before action do?

The only option of before_action defines one action OR a list of actions when the method/block will be executed first. The set_newsletter_email method will be called just before the show and edit actions. The opposite option except define when NOT to execute the method/block.

What are controller callbacks in rails?

Rails provides before and after actions in controllers as an easy way to call methods before or after executing controller actions as response to route requests.


1 Answers

before_action (formerly named before_filter) is a callback that is performed before an action is executed. You can read more about controller before/after_action.

It is normally used to prepare the action or alter the execution.

The convention is that if any of the methods in the chain render or redirect, then the execution is halted and the action is not rendered.

before_action :check_permission  def hello end  protected  def check_permission   unless current_user.admin?     # head is equivalent to a rendering     head(403)   end end 

In this example, if current_user.admin? returns false, the hello action is never performed.

The following one, instead, is an example of action setup:

before_action :find_post  def show   # ... end  def edit   # ... end  def update   # ... end  protected  def find_post   @post = Post.find(params[:id]) end 

In this case find_post will never return false. In fact, the purpose of this before_action is to extract a shared command from the body of the actions.

About returning false, as far as I know this is true for ActiveRecord callbacks. But for a before_action, returning false has no effect. In fact, the return value is not mentioned as important in the official documentation.

like image 123
Simone Carletti Avatar answered Sep 17 '22 21:09

Simone Carletti