Существует две вещи вы должны знать
- рубин делает разницу между символами (
: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
), чтобы уточнить, что вы хотите сделать.