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

Sop*_*ias 2 ruby ruby-on-rails devise

我是 ruby​​ on rails 的新手。我正在处理一个项目并遇到了表单问题。我正在使用设计进行身份验证。我有一个具有管理员和用户角色的用户类。设计为用户生成的添加/更新方法工作正常。当我尝试为管理员创建编辑页面时,我遇到了“没有路由匹配 [PATCH]”错误。这是我正在使用的表格

<h4>Update Profile</h4>
 <%= form_for @user, :url => {:controller => "admin", :action => "update" }  do |f|  %>

<%= hidden_field_tag(:id, @user.id) %>
<table>
  <tr>
    <td>First Name</td>
    <td><%= f.text_field  :first_name , :class => "form-control"%></td>
  </tr>
  <tr>
    <td>Last Name</td>
    <td><%= f.text_field  :last_name , :class => "form-control"%></td>
  </tr>
  <tr>
    <td>Email</td>
    <td><%= f.text_field  :email , :class => "form-control"%></td>
  </tr>
  <tr>
    <td></td>
    <td><%= f.submit "Update", :class => "btn btn-md btn-success pull-right" %></td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

<%end%>

这是我的控制器方法

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
Run Code Online (Sandbox Code Playgroud)

我也有路线

get 'admin/update'
 get 'admin/edit'
Run Code Online (Sandbox Code Playgroud)

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

cef*_*edo 5

关键是:您仅从GETHTTP 的方法中进行设置,对于更新,您需要一个PUT或一个PATCH方法。有一些约定何时使用PUTor PATCH,但在您的情况下,制作PATCH路线可以解决您所说的问题

patch 'admin/:1'
Run Code Online (Sandbox Code Playgroud)

但是,显然您正在为每个 REST 方法为自己编写一个路由,Rails 有一个名为“帮助器”的结构resources,可以为您创建所有 REST 方法。您可以根据自己的config/routes.rb喜好创建一个入口:

resources :admins
Run Code Online (Sandbox Code Playgroud)

它将生成用于指向您的 REST 方法的每条路由,user_controller并将其重命名为admin. 只放那行代码,相当于在你的配置/路由上写下所有这些命令:

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
Run Code Online (Sandbox Code Playgroud)

您可以在Rails 指南上看到更多信息。它有许多关于创建路由的有用建议。