Rails - заявление о разрыве? - PullRequest
0 голосов
/ 23 ноября 2010

Есть ли у rails оператор break?

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

ЕСЛИ! Все эти переменные существуют и не равны нулю?ПРОРЫВАЙТЕ и не продолжайте, потому что что-то пошло не так END

Если XXX = 'adsasd сделает все это, то ЕЩЕ ЕСЛИ

ИЛИ отправьте сообщение об ошибке по электронной почте

Возможен ли перерыв

Ответы [ 2 ]

3 голосов
/ 23 ноября 2010

Я не знаю, когда все ваши переменные станут доступными, но когда я хочу сделать проверки в контроллере, я обычно использую обратные вызовы 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

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

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

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

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

1 голос
/ 23 ноября 2010

Заявление Ruby return - это то, что вы ищете. Однако ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...