проблема с RESTful формами в Rails 3

#ruby-on-rails-3 #validation #controller

#ruby-on-rails-3 #проверка #контроллер

Вопрос:

хорошо, итак, в принципе, у меня есть обычная форма для моей модели:

 = form_for @operator do |f|
blah blah blah
  

В моем контроллере operators у меня есть это:

 def new
  @operator = Operator.new
  @operator.build_user

  respond_to do |format|
    format.html {}
  end
end

def create
  @user = User.create(params[:operator].delete(:user))
  @user.update_attributes(:login => @user.email)
  @operator = Operator.new(params[:operator].merge(:user => @user))

  respond_to do |format|
    if @operator.save
      format.html {redirect_to new_operator_aircraft_path(@operator)}
    else
      format.html { render :action => "new", :error => @operator.errors }
    end
  end
end
  

очень простой материал. У меня есть некоторые validates_presence_of вещи в моей модели, поэтому, естественно, когда я отправляю свою форму, она должна показать мне, что у меня есть ошибки (и сохранить заполненные мной поля)

Пока все в порядке? да. Проблема в том, что, похоже, я отправляю в /operators и это то, что отображается. Кажется, я забыл о том, что происходит в Rails2.3 , но разве меня не следует снова перенаправить в /operators / new? или это было предполагаемое поведение с самого начала?

Ответ №1:

Вот о чем, я думаю, вы спрашиваете:

Почему после отправки формы с ошибками URL-адрес читается «/operators», а не «/ operators / new».

Благодаря ресурсоемкой маршрутизации, при отправке формы через POST в «/operators» в OperatorsController вызывается действие create. Если вы столкнулись с ошибками при сохранении вашего оператора, вы поручили контроллеру выполнить новое действие в рамках того же запроса.

 render :action => "new", :error => @operator.errors
  

Это означает, что перенаправление не происходит, и поэтому URL остается «/operators».

Если произойдет перенаправление, вы потеряете всю информацию о состоянии объекта @operator в текущем запросе, включая ошибки, с которыми вы столкнулись, а также значения формы, которые вы только что отправили.

Другими словами, работает так, как задумано.