2013-08-29 3 views
0

Rails была сгенерирована URL действия для моей формы:Auth Неудача в форме

<form action="/auth/failure?action=update&controller=users"... 

Я проверку подлинности на сайте, даже если я не должен быть, было бы перенаправить куда-то, как я понимаю Auth.

Мой код Форма:

<%= form_for @user, :url => { 'controller' => 'users', 'action' => 'update'} do |f| %> 

Спасибо!

ответ

1

Существует две вещи вы должны знать

  • рубин делает разницу между символами (:controller, :update) и строк ('controller', 'update').
  • В этом случае вам не нужно указывать :url.

Таким образом, для текущего кода, правильная линия проста:

form_for @user do |f| 

Если @user новый рекорд, form_for будет указывать на create действия Вашего UsersController, если @user является существующая запись, form_for будет указывать на update действие автоматически. Rails достаточно умен, чтобы сделать это :-)

Если вы действительно хотите использовать :url атрибут form_for, у вас есть две опции:

  • Используйте вспомогательные методы маршрутизации: form_for @user, :url => user_path(@user), :method => :put
  • Используйте правильный путь хэш : form_for @user, :url => { :controller => :users, :method => :update, :id => @user.id }

Rails использует стиль REST для создания URL-адресов, если вы используете resources :users в config/route.rb (и я рекомендую вам использовать это), и есть два т повесят вам нужно знать: - Коллекция представляет собой группу лиц (в вашем случае, пользователи) - член является один объект

Так коллекция URL является то, где вы можете ожидать несколько объектов, URL элемент то, где можно ожидать только одного объекта.

Вы должны использовать :id при описании update действий с URL-хешем, потому что update может выполняться только на члене, а не на коллекции. Поэтому вам нужно создать URL-адрес участника с помощью специального метода HTTP (PUT), чтобы уточнить, что вы хотите сделать.

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