Я работаю над учебным пособием Майкла Хартла Rails и встречаю ошибку в главе 10, где я добавляю возможность пользователям редактировать свою информацию. Отправка формы на странице редактирования дает следующее сообщение об ошибке:Действие x не найдено для yController
Unknown action: The action 'update' could not be found for UsersController
Я прочитал приблизительно через 10 одинаковых вопросов на StackOverflow, поэтому прошу прощения за дубликат, но в каждом из этих случаев проблема заключалась в том, что они должны были преждевременно закончил класс UsersController
или не определил соответствующее действие. У меня довольно эксплицитно определено действие update
внутри UsersController
, и в четыре раза проверено количество используемых end
s. Вот мой users_controller.rb
:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Account successfully created! An email has been sent to
#{@user.email} for validation."
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
# Handle a successful update.
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
Я также проверили дважды все мои маршруты, чтобы убедиться, что это правильно:
$ rake routes
Prefix Verb URI Pattern Controller#Action
root GET / statics#home
signup GET /signup(.:format) users#new
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
И это подтверждает, что мой users#update
правильно разгромлена. Я не могу для жизни понять, почему действие update
не подбирается. Любая помощь приветствуется.
Edit: В соответствии с просьбой, вот лог-сервера для запроса:
Started PATCH "https://stackoverflow.com/users/1" for ***** at 2016-07-12 04:43:43 +0000
AbstractController::ActionNotFound (The action 'update' could not be found for UsersController):
actionpack (4.2.2) lib/abstract_controller/base.rb:132:in `process'
actionview (4.2.2) lib/action_view/rendering.rb:30:in `process'
actionpack (4.2.2) lib/action_controller/metal.rb:196:in `dispatch'
<lots of irrelevant internal rails stuff>
Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/unknown_action.html.erb within rescues/layout (2.0ms)
Можете ли вы проверить свой запрос как «PATCH» или нет в журналах сервера? – user100693
Это действительно проходит как патч: 'Started PATCH"/users/1 "for ****** at 2016-07-12 04:43:43 + 0000' – Nemo
Не могли бы вы добавить больше из журналов, когда это произойдет ? – nikkypx