2010-11-23 2 views
0

Есть ли у рельсов заявление о разрыве?Rails - заявление о прекращении?

Я пишу контроллер, у которого есть некоторые довольно сложные утверждения IF. В сумме, что я хотел бы сделать, это примерно так:

IF! Все эти переменные существуют и не ноль? BREAK и не продолжают БЭК что-то пошло не так END

Если XXX = «adsasd делать все эти вещи ELSE IF

ELSE отправить электронное сообщение об ошибке

ли разрыв возможно?

+0

@Alex render не то же самое, что и return и не выходит из текущего метода. – 2010-11-23 02:45:52

ответ

3

Я не знаю, когда все ваши переменные становятся доступными, но когда я хочу делать проверки в контроллере, я обычно использую обратные вызовы before_filter для этого. Например:

class YourController 
    before_filter :check_if_variables_exist 

    def show 
    #prepare for render view 
    end 

private 
    def check_if_variables_exist 
    unless @your_variable.nil? 
     #Do what you want 
     render :nothing => true 
    end 
    end 

Что это делает, что когда приходит запрос к действию шоу в YourController, он сначала вызывает частный метод check_if_variables_exist. Если значение @your_variable равно нулю, то оно будет в render: nothing => true, и filter_chain будет остановлен, и действие будет никогда не вызываться. Если, однако, ваш_variable не равен нулю, тогда метод завершится без каких-либо действий, и контроллер затем вызовет действие, как обычно.

Итак, все, что вы хотите проверить заранее, может быть размещено в разных обратных вызовах before_filter. И если вы не хотите, чтобы проверить все действия в контроллере, он может быть определен следующим образом:

class YourController 
    before_filter :first_check, :only => [:index, :show] 
    before_filter :second_check, :only => [:show, :edit] 

На мой взгляд, это «рельсы» способ сделать это.

+0

Это отличная чистая идея !!! Мне это очень нравится. Спасибо – AnApprentice 2010-11-23 04:52:22

1

Инструкция Ruby's return - это то, что вы ищете. Однако ...

Я пишу контроллер, который имеет некоторые довольно сложный IF заявления

Не зная ничего другого о приложении, это красный флаг BIG. Контроллеры не имеют места для сложной логики. Если вы используете шаблоны проектирования RESTful (и редко есть причина не делать этого), то ваши контроллеры должны быть очень легкими и не содержать практически никакой логики. Модели, где ваша бизнес-логика принадлежит. Они позволяют изолировать логику, упростить ваше приложение и упростить тестирование.

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