Ruby on rails 没有与自定义操作的put请求的[GET]匹配的路由

Ruby on rails 没有与自定义操作的put请求的[GET]匹配的路由,ruby-on-rails,ruby,ruby-on-rails-4,devise,routes,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,Routes,我有一个用户模型和控制器。我正试图向我的控制器发出一个put和delete请求,其中put请求与用户#allow绑定,而delete请求被假定为指向用户#DISTROL。但是,当我提出请求时,我不断收到此错误: No route matches [GET] "/users/1/allow" 我还使用Desive for users和admin类,因此这可能与此错误有关。我不是很确定。这是我的路线。rb: Rails.application.routes.draw do get 'user

我有一个用户模型和控制器。我正试图向我的控制器发出一个put和delete请求,其中put请求与用户#allow绑定,而delete请求被假定为指向用户#DISTROL。但是,当我提出请求时,我不断收到此错误:

No route matches [GET] "/users/1/allow"
我还使用Desive for users和admin类,因此这可能与此错误有关。我不是很确定。这是我的路线。rb:

Rails.application.routes.draw do

  get 'users/index'
  put 'users/:id/allow', :to => 'users#allow', :as=>:users_allow
  delete 'users/:id/destroy', :to => 'users#destroy',:as => :users_destroy

  devise_for :users
  devise_for :admins

  root 'website#show'
  resources :tweets do
     put '/pass', :to => 'tweets#pass',:as => :pass
     put '/fail', :to => 'tweets#fail',:as => :fail
  end

  get '/to_json', :to=>'tweets#to_json'
结束

这是我的用户控制器:

class UsersController < ApplicationController
 before_action :find_user, only:[:allow,:destroy]
   before_filter :authenticate_admin!

  def index
    @users = User.all
  end

  def allow

    find_user.update(:edit_permission=>true)
    redirect_to(:back)
  end

  def destroy
    find_user.destroy
    redirect_to(:back)
  end


  private

    def find_user
        @user = User.find(params[:user_id])
    end
end
class UsersControllertrue)
将_重定向到(:返回)
结束
def销毁
查找用户
将_重定向到(:返回)
结束
私有的
def查找用户
@user=user.find(参数[:user\u id])
结束
结束
这是我呼叫的用户视图,users/index.html.erb:

<h1>Users#index</h1>
<p>Find me in app/views/users/index.html.erb</p>
<ul>
    <% @users.each do |user|%>


        <% if user.edit_permission == nil%>
             <li style="color:red"> <%=link_to 'approve', users_allow_path(user), method: :put  %> <%=link_to 'delete', users_destroy_path(user), method: :delete %><%= "#{user.name} #{user.email}"%> </li>
        <% else%>
            <li style="color:green"><%=link_to 'delete', users_destroy_path(user), method: :delete %><%= "#{user.name} #{user.email}"%> </li>
        <% end%>

    <%end%>
</ul>
用户#索引
在app/views/users/index.html.erb中查找我

我还想补充一点,当我进入视图并在浏览器中为put请求的链接执行inspect元素时,我确实看到了以下内容:

 <a rel="nofollow" data-method="put" href="/users/1/allow">approve</a>


我会运行
rake routes
查看您的实际路线,因为在
routes.rb
中,您实际上没有一条与
用户/:id/allow
匹配的路线,我会运行
rake routes
查看您的实际路线,因为在你的
routes.rb
中,你实际上没有一个路由与
get
users/:id/allow

相匹配,你的控制器中的
allow
方法是被执行的(即数据库中的记录是否被更新)?或者,在日志文件中,您是否看到在错误的GET操作之前处理PUT操作,或者调用GET操作来代替PUT操作?我想这可能是你的
重定向到(:back)
在捉弄你。确保你的应用程序中启用了JavaScript,否则请求将返回到使用
GET
听起来好像
jquery\u ujs
没有加载Pavan的评论听起来不错。Rails依赖无结构的JS来处理
数据方法
属性。否则,所有链接都将降级为get。控制器中的
允许
方法是否执行(即数据库中的记录是否更新)?或者,在日志文件中,您是否看到在错误的GET操作之前处理PUT操作,或者调用GET操作来代替PUT操作?我想这可能是你的
重定向到(:back)
在捉弄你。确保你的应用程序中启用了JavaScript,否则请求将返回到使用
GET
听起来好像
jquery\u ujs
没有加载Pavan的评论听起来不错。Rails依赖无结构的JS来处理
数据方法
属性。否则,所有链接都将降级为GET。
#config/routes.rb
resources :users, only: [:index, :destroy] do
   put :allow, action: :allow #-> url.com/users/:user_id/allow
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController

   def index
      @users = User.all
   end

   def allow
      user.update edit_permission: true
      redirect_to :back
   end

   private

   def user
      User.find params[:user_id] #-> why return an instance var if you aren't going to use it
   end
end


#app/views/users/index.html.erb
<ul>
    <% @users.each do |user| %>
        <% options = {} %>
        <% options.allow   = ["allow", "red", "put"] %>
        <% options.destroy = ["destroy", "green", "delete"] %>

        <% option = user.edit_permission ? options.allow : [options.allow, options.destroy] %>
        <% option.each do |action,colour,method| %>
            <%= link_to action, eval("users_#{action}_path(user)"), method: method, class: colour %><%= "#{user.name} #{user.email}") %>
        <% end %>
    <% end %>
</ul>
#app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require_tree .