2015-10-15 39 views
1

我有一个用户模型和控制器。我正在尝试向我的控制器发出放入和删除请求,其中放置请求与用户绑定#允许,并且删除请求被假定为被定向到用户#destroy。然而,我不断收到这个错误,当我提出请求:没有路由匹配[GET]对自定义操作的放置请求

No route matches [GET] "https://stackoverflow.com/users/1/allow" 

我也使用设计为用户和管理类,这样可能有一些与此有关的错误。我不太确定。这是我的routes.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 

这里是我的用户查看我在哪里,在用户/ 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> 

我还想补充一点,当我进入视图,并在浏览器中为链接PUT请求我看到这一点:

<a rel="nofollow" data-method="put" href="https://stackoverflow.com/users/1/allow">approve</a> 
+0

控制器中的'allow'方法是否被执行(即,是数据库中更新的记录)还是根本不?或者,在日志文件中,您是否看到在错误的GET操作之前处理了PUT操作,或者是否调用GET操作来代替PUT操作?我认为这可能是你的'redirect_to(:back)'玩弄你的技巧。 – Jaxx

+1

请确保您的应用程序已启用JavaScript,否则请求将回退到使用'GET' – Pavan

+1

听起来像'jquery_ujs'未加载 – nsave

回答

0

我会跑rake routes看您的实际路线,因为在你的routes.rb你居然没有一个匹配getusers/:id/allow

0
#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> 

路线 -

要解决实际问题,你需要确保你有你的Rails UJS驱动程序加载:

#app/assets/javascripts/application.js 
//= require jquery 
//= require jquery_ujs 
//= require_tree . 
相关问题