没有路线匹配[POST]" / profile / 12 / edit"

时间:2015-05-20 13:13:34

标签: ruby-on-rails devise

我试图为设计用户制作一个自定义编辑表单,但是当我提交表单shell时抛出这个错误:

No route matches [POST] "/profile/12/edit"

这是我的表格:

= simple_form_for(:user), html: { method: :put }) do |f|
= f.input :email
= f.input :username
= f.input :phone
= f.input :password, autocomplete: "off", required: false
= f.input :password_confirmation, required: false
= f.input :current_password, required: true
= f.button :submit, 'Update'

这是我的profile_controller

class ProfileController < ApplicationController

  def show
    @client = Client.find(params[:id])
  end

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

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(params[:user])
      redirect_to root_path
    end
  end
end

我的routes.rb:

Rails.application.routes.draw do

  root 'home#index'

  devise_for :users
  resources :profile

end

我做错了什么?

2 个答案:

答案 0 :(得分:0)

替换:

= simple_form_for(:user), html: { method: :put }) do |f|

使用:

= simple_form_for @user, method: :put, url: "/profile" do |f|

一些错误:

  • 如果你想编辑一个对象,提供它,而不仅仅是一个符号

  • 必须调整路径以指向/profile

  • 方法不是html属性,它会创建一个被rails拦截的隐藏字段,以便知道收到的post应该被理解为put

  • 我们觉得有一个错字:控制器应该是多元化的

答案 1 :(得分:0)

我就是这样做的:

= simple_form_for @user, 
    :url => url_for(:action => 'edit', :controller => 'profiles'),
    :method => 'put' do |f| 

在这里,您要向ProfilesController的修改操作提交PUT(更新)请求。

另请注意ProfileController与我写的ProfilesController之间的区别。 Rails和DHH的惯例是你的模型名称应该是单数,而你的控制器是复数。

<强>模型

class Profile < ActiveRecord::Base
end

<强>控制器

class ProfilesController < ApplicationController
end