Ruby on rails 没有与[修补程序]“/editer”匹配的路由

Ruby on rails 没有与[修补程序]“/editer”匹配的路由,ruby-on-rails,ruby-on-rails-4,ruby-on-rails-4.2,Ruby On Rails,Ruby On Rails 4,Ruby On Rails 4.2,我的错误是:没有与[PATCH]/editer匹配的路由 路线: get "/editer", :to => 'users#edit' post "/editer", :to => 'users#update' 控制器: def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) if @user.update_attri

我的错误是:没有与[PATCH]/editer匹配的路由

路线:

get "/editer", :to => 'users#edit'
post "/editer", :to => 'users#update'
控制器:

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

def update
        @user = User.find(params[:id])
        if @user.update_attributes(user_params)
            redirect_to :action=>"show", :id=>@user.id
            flash[:success] = "ok"
        else
          render 'edit'
        end
end
视图:

没有与[PATCH]/editer匹配的路由

你需要改变

post "/editer", :to => 'users#update'


RESTfulAPI的协议指出,补丁谓词更适合更新,而POST谓词更适合创建

Rails遵循此约定,因此会出现错误,因为您已经使用post谓词声明了路由。只需将该行从post/editer改为=>'usersupdate' 到


您不妨考虑使用用户资源,这会使事物更具语义性。

< P>不管HTTP谓词使用不当,您的路由应定义为PUTE……,因为您不符合Rails的路由结构,您将得到一个错误:

#config/routes.rb
resources :users, path: "editer", only: [:edit, :update], path_names: { edit: "", update: "" } #-> url.com/editer/:id

<%= simple_form_for @user ,:html=> {class: "form-horizontal", id: "form" } do |f| %>
这无关紧要,你可以在Rails中做任何你想做的事情;不同之处在于,您在控制器中使用的是标准化的resourceful操作设置,它需要params[:id]


以上内容应该可以为您解决问题。

现在我有以下错误:找不到具有“id”的用户=@SmithZahir您可以发布生成的参数吗?**插入**,因为我没有在更新中获取id,现在我得到一个未更新的rolback:参数:{utf8=>✓真实性_令牌=>Up+onyR3BLbOZO6dfb+hSIS9sFqgUrTDeldJGUfmOwGgdAmPEq9bvxwv/YI8nKy+7oQdQxtbP0lgSxHqeMmuiQ==,用户=>{email=>correo1@example.com},id=>1}用户加载0.2ms选择用户。*从用户`WHERE users.id=1限制1 0.1ms开始用户存在0.1ms从用户中选择1作为`users.email`='correo1@example.com'和users.id!=1限制1 0.1ms回滚`@SmithZahir您在用户表中有id=1的用户记录吗?如果我在表单上注册了id=1的用户,我不使用editer:resources:users,path:editer,only:[:edit,:update],path_name:{edit:,update:}->url.com/editer/:id,这应该是我在路由文件中的设置吗?甚至我也不能编辑记录。你的路由是get/editer=>usersedit等,我的路由是以我不使用editer:resources:users,path:editer,only:[:edit,:update],path_name:{edit:,update:}->url.com/editer/:id的形式修复的,这应该是我在路由文件中的设置吗?即使我不能编辑记录,我的错误是没有路由匹配[PATCH]/users/1。您的表单清楚地说明了url:editer\u url,所以是的,您正在我的控制台中的表单中使用editer,我知道它已经存在并且没有更新回滚:用户存在0.1ms从用户中选择1作为其中的一个“users.email`=”correo1@example.com'和users.id!=1限制1 0.2ms回滚`
patch "/editer", :to => 'users#update'
patch "/editer", :to => 'users#update'
#config/routes.rb
resources :users, path: "editer", only: [:edit, :update], path_names: { edit: "", update: "" } #-> url.com/editer/:id

<%= simple_form_for @user ,:html=> {class: "form-horizontal", id: "form" } do |f| %>