2016-07-12 4 views
0

Я работаю над учебным пособием Майкла Хартла 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) 
+0

Можете ли вы проверить свой запрос как «PATCH» или нет в журналах сервера? – user100693

+0

Это действительно проходит как патч: 'Started PATCH"/users/1 "for ****** at 2016-07-12 04:43:43 + 0000' – Nemo

+0

Не могли бы вы добавить больше из журналов, когда это произойдет ? – nikkypx

ответ

0

Возвращаясь на следующий день и повторное открытие моего рабочего пространства на облаке 9, показал, что файл users_controller.rb не сохранен правильно. Это, скорее всего, вызвано временным отключением. Действия edit и update не были сохранены в сохраненном файле, и их повторное добавление приводило к правильной работе приложения.

Для тех, у кого есть такая же проблема, если вы используете Cloud 9 или другое рабочее пространство в Интернете, я предлагаю проверить подключение к Интернету и/или закрыть и снова открыть рабочее пространство.