Лучшая практика Rails по условным параметрам в действии контроллера - PullRequest
1 голос
/ 18 апреля 2010

У меня есть действие создания контроллера, которое ищет один или несколько параметров в следующем наборе правил. Допустим, у нас есть два параметра, foo и bar. Правила следующие:

1) если foo не существует в списке параметров, бар должен.
2) если bar не существует в списке параметров, foo must.
3) они оба могут сосуществовать. они не могут быть оба опущены (это излишне с моими правилами выше :))

Может кто-нибудь показать пример в Rails о том, как это обрабатывается в контроллере? Должен ли я использовать before_filter? Был бы признателен за некоторые рекомендации, так как это не то, что ActiveRecord проверяет .. поэтому мне нужно построить сообщение об ошибке для пользователя непосредственно из логики контроллера, а не модели логики.

Для бонусных баллов я выводил ошибку в XML, так что если вы сможете показать, как это делается, это было бы здорово. Гипотетически давайте назовем ресурс «Lorem», поэтому он создается через http://foo/lorem.xml и у нас есть lorem_controller.rb.

Я пытаюсь что-то вроде этого, надеясь, что есть более чистый способ:

  def create
    logger.info("request bootstrap: #{params}")
    if params[:foo].nil? && params[:bar].nil?
      @errors = [] ||= << "Must include foo or bar."
      respond_to do |format|
        format.xml { render :layout => false,
                      :xml => @errors.to_xml }
      end
    end
  end

1 Ответ

0 голосов
/ 18 апреля 2010

Вы можете использовать оператор ИЛИ. Например, если вы передаете параметры как один хэш. Чем вы можете использовать условие

parameters.key?(:foo ) || parameters.key?(:bar)

Если вы можете показать больше (как вы передаете аргументы) из своего кода (или описать), я могу порекомендовать менее распространенное решение.

ИМХО лучшим способом будет этот код

if params.key?(:foo) || params.key?(:bar)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...