没有路线匹配[POST]" / users / 1 / edit"从表单更新时 - Rails

时间:2014-09-30 19:12:45

标签: ruby-on-rails ruby forms devise rails-routing

Rails的新手..

我正在访问表单:/ users / 1 / edit(显示但不会更新并抛出错误)我还有一个设计表单:/ user / edit(显示和正确更新)

我使用的是Rails 4和Devise 3.1。

routes.rb中:

    resources :users
    devise_for :user, :controllers => { registrations: 'registrations' }
    get 'users/:id' => 'users#show'

和我的可用路径:

users_path                      GET /users(.:format)    users#index
                                POST    /users(.:format)    users#create
new_user_path                   GET /users/new(.:format)    users#new
edit_user_path                  GET /users/:id/edit(.:format)   users#edit
user_path                       GET /users/:id(.:format)    users#show
                                PATCH   /users/:id(.:format)    users#update
                                PUT /users/:id(.:format)    users#update
                                DELETE  /users/:id(.:format)    users#destroy

new_user_session_path           GET /user/sign_in(.:format) devise/sessions#new
user_session_path               POST    /user/sign_in(.:format) devise/sessions#create
destroy_user_session_path       DELETE  /user/sign_out(.:format)    devise/sessions#destroy
user_password_path              POST    /user/password(.:format)    devise/passwords#create
new_user_password_path          GET /user/password/new(.:format)    devise/passwords#new
edit_user_password_path         GET /user/password/edit(.:format)   devise/passwords#edit
                                PATCH   /user/password(.:format)    devise/passwords#update
                                PUT /user/password(.:format)    devise/passwords#update

cancel_user_registration_path   GET /user/cancel(.:format)  registrations#cancel
user_registration_path          POST    /user(.:format) registrations#create
new_user_registration_path      GET /user/sign_up(.:format) registrations#new
edit_user_registration_path     GET /user/edit(.:format)    registrations#edit
                                PATCH   /user(.:format) registrations#update
                                PUT /user(.:format) registrations#update
                                DELETE  /user(.:format) registrations#destroy
                                GET /users/:id(.:format)    users#show

users_controller.rb

    def index
     @users = User.all
    end

    def show
     @user = User.find(params[:id])
    end

    def edit
    end

    def create
     @user = User.create(user_params)
    end

    def destroy
    end

    private

    def user_params
     params.require(:user).permit(:avatar)
    end

更新: 我找到了答案,因此删除了一些内容。

2 个答案:

答案 0 :(得分:1)

我对您设置应用程序的方式感到有些困惑,但值得注意的是,我并不认为您的表单知道要更新的内容。试试这个:

<%= form_for @profile do |f| %>
...

然后,您需要更新用户控制器中的编辑操作:

def edit
  user = User.find(params[:id])
  @profile = user.profile
end

请注意,它听起来像个人资料是自己的类,属于用户,因为您的用户模型表明&#34; has_one:个人资料。&#34;但我不认为实际上是这样,如果不是,你应该从你的模型中删除那种语言。但如果是这种情况,您需要有一个配置文件控制器,它将具有类似的CRUD操作,其中应包括我上面描述的操作方法。

答案 1 :(得分:0)

您的Users控制器需要update操作

class UsersController < ApplicationController

  ...

  def update
    user = User.find(params[:id])
    user.update(user_params)
  end
end