如何修复“没有路由匹配”

我是铁轨上的ruby的新手。 我正在研究一个项目并遇到一个表格问题。 我正在使用设计进行身份validation。 我有一个具有管理员和用户角色的用户类。 为用户设计的设备添加/更新方法正常工作。 当我尝试为管理员创建编辑页面时,我遇到了“No route matches [PATCH]”错误。 这是我正在使用的表格

Update Profile

{:controller => "admin", :action => "update" } do |f| %>
First Name "form-control"%>
Last Name "form-control"%>
Email "form-control"%>
"btn btn-md btn-success pull-right" %>

这是我的控制器方法

 def edit end def update @user = User.find(params[:id]) if request.post? if(@user.update_attributes(params[:first_name, :last_name, :email] )) redirect_to :action => "admin_portal" else render :action => "edit" end end end 

我也有路线

 get 'admin/update' get 'admin/edit' 

任何人都可以建议我如何解决这个问题。

重点是:您只从HTTP的方法设置GET ,而对于更新,您需要PUTPATCH方法。 有一些约定何时使用PUTPATCH ,但在你的情况下,制作PATCH路线将解决你的问题,如你所说

 patch 'admin/:1' 

但是,显然你正在为自己编写一个适用于每个REST方法的路径,而Rails有一个称为resources的“辅助”结构,可以为你创建所有REST方法。 您可以在config/routes.rb上创建一个入口,如:

 resources :admins 

它将生成指向您的user_controller命名为admin的REST方法的每个路由。 只放置那行代码,相当于在config / routes上写下所有这些命令:

 get 'admins', controller: 'admins', action: :index get 'admin/:id', controller: 'admins', action: :show get 'admin/new', controller: 'admins', action: :new get 'admin/:id/edit', controller: 'admins', action: :edit post 'admin', controller: 'admins', action: :create patch 'admin/:id', controller: 'admins', action: :update put 'admin/:id', controller: 'admins', action: :update delete 'admin/:id', controller: 'admins', action: :delete 

您可以在Rails指南中查看更多信息。 它在创建路线方面有很多有用的建议。

这是因为你有持久模型的form_for @user它会生成patch ,而你只有路径。 改变get patch 。 更多信息http://guides.rubyonrails.org/routing.html