【问题标题】:Rails exception: No route matches [GET] "/clock_events/1/clock_in"Rails 异常:没有路线匹配 [GET] "/clock_events/1/clock_in"
【发布时间】:2019-04-10 21:09:15
【问题描述】:

它曾经可以工作,但经过一些更改后,Action Controller 捕获异常
Routing Error: No route matches [GET] "/clock_events/1/clock_in"

routes.rb文件:

Rails.application.routes.draw do
  root to: 'clock_events#index'

  get '/register', to: 'users#new'
  get '/login', to: 'sessions#new'
  post '/login', to: 'sessions#create'
  get '/logout', to: 'sessions#destroy'

  resources :clock_events, except: [:destroy] do
    member do
      post 'clock_in', to: 'clocks#clock_in'
      post 'clock_out', to: 'clocks#clock_out'
    end
  end

  resources :users, except: [:destroy]

end

【问题讨论】:

    标签: ruby-on-rails model-view-controller


    【解决方案1】:

    您已经使用post http 动词定义了clock_in,这里:

    resources :clock_events, except: [:destroy] do
      member do
        post 'clock_in', to: 'clocks#clock_in'
        post 'clock_out', to: 'clocks#clock_out'
      end
    end
    

    但是,您正在尝试使用 get 动词,如下所示:

    Routing Error: No route matches [GET] "/clock_events/1/clock_in"
    

    您需要更改路径以使用 get 动词:

    resources :clock_events, except: [:destroy] do
      member do
        get 'clock_in', to: 'clocks#clock_in'
        post 'clock_out', to: 'clocks#clock_out'
      end
    end
    

    或者修改您的链接(或其他)以使用post 方法。

    此外,您的 clock_inclock_out 操作在 clocks 控制器上调用,而不是在 clock_events 控制器上调用,如您的 to: 指令所示:

    resources :clock_events, except: [:destroy] do
      member do
        post 'clock_in', to: 'clocks#clock_in'
        post 'clock_out', to: 'clocks#clock_out'
      end
    end
    

    您确定不想使用ClockEventsController 吗?如果是这样,你可以这样做:

    resources :clock_events, except: [:destroy] do
      member do
        post :clock_in
        post :clock_out
      end
    end
    

    在这种情况下你会得到:

     clock_in_clock_event POST   /clock_events/:id/clock_in(.:format)      clock_events#clock_in
    clock_out_clock_event POST   /clock_events/:id/clock_out(.:format)     clock_events#clock_out
             clock_events GET    /clock_events(.:format)                   clock_events#index
                          POST   /clock_events(.:format)                   clock_events#create
          new_clock_event GET    /clock_events/new(.:format)               clock_events#new
         edit_clock_event GET    /clock_events/:id/edit(.:format)          clock_events#edit
              clock_event GET    /clock_events/:id(.:format)               clock_events#show
                          PATCH  /clock_events/:id(.:format)               clock_events#update
                          PUT    /clock_events/:id(.:format)               clock_events#update
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 2014-12-11
      • 2017-08-03
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多