Проверка форм с помощью переменных - PullRequest
0 голосов
/ 17 февраля 2010

В большинстве примеров, которые я вижу, я замечаю, что в контроллере новый метод просто имеет:

@object = Object.new

В методе создания вы увидите что-то вроде:

@object = Object.find(params[:object])
    if @object.save
      flash[:success] = "This object has been added."
      redirect_to objects_path
    else
      render :action => 'new'
    end

Это прекрасно работает, но единственное, с чем я сталкиваюсь (довольно часто), это когда проверки не проходят с использованием некоторых встроенных вспомогательных методов:

validates_presence_of: значение

будет вызвано "render: action => 'new'. Тогда rails обходит контроллер и переходит прямо к действию для new, которое пытается визуализировать форму.

Этот обход контроллера убивает меня, потому что иногда я загружаю значения в форму, используя значения, которые я определил в своем контроллере.

В итоге я получу ошибки из-за нулевых значений, потому что рельсы обошли контроллер, и значения никогда не устанавливались при загрузке "render: action => 'new'".

Мой вопрос: Каков наилучший способ перенаправить форму (или лучшую практику в целом) при проверке формы, в которой назначены переменные, которые определены в контроллере? Я хочу избежать этих ошибок с нулевым значением, поэтому я думаю, что просто делаю это неправильно с самого начала.

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Вы можете переместить свой собственный бит кода, который загружает ваши различные значения в before_filter, примерно так:

before_filter :get_values, :only => [:new, :create]

def new
  # your code here
end

def create
  @object = Object.new params[:object
  if @object.save
    flash[:success] = "This object has been added."
    redirect_to objects_path
  else
    render :action => 'new'
  end
end

private

def get_values
  # your code here
end
0 голосов
/ 17 февраля 2010

Один способ: визуализировать скрытые поля для всех этих переменных, чтобы ваш объект уже имел их в действии create. Другой способ: создать before_filter для этих двух действий.

Лично я бы выбрал второй вариант.

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