如何修复“没有路由匹配”
我是铁轨上的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
,而对于更新,您需要PUT
或PATCH
方法。 有一些约定何时使用PUT
或PATCH
,但在你的情况下,制作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