我试图为设计用户制作一个自定义编辑表单,但是当我提交表单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
我做错了什么?
答案 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