2010-12-11 2 views

ответ

5

Согласно рельсам API docs: возвратная часть прекращает выполнение чего-либо еще. Другими словами, если бы у вас было ниже, текст никогда не будет печататься из-за оператора return.

def go_home 
    redirect_to(:action => "home") and return 
    puts "This will never print" 
    end 

В следующем примере and return вызывается только if monkeys.nil? верно.

def do_something 
    redirect_to(:action => "elsewhere") and return if monkeys.nil? 
    render :action => "overthere" # won't be called if monkeys is nil 
    end 

от: http://api.rubyonrails.org/classes/ActionController/Base.html

+0

Обратите внимание, что эта идиома использует оценки короткого замыкания булевой 'and' выражение. Если 'redirect_to' возвращает' false', Ruby берет короткое замыкание и не оценивает остаток выражения; однако, если 'redirect_to' возвращает' true', то остаток выражения должен быть оценен. Поскольку остальная часть - 'return', эффект всего выражения:« выдайте код перенаправления (302), и если это действительно произойдет, вернитесь, не предпринимая никаких других действий ». –

Смежные вопросы