2016-07-13 2 views
0

Projectsroller를 어지럽히 기보다는 자체 리소스 여야하는 몇 가지 작업을 통합하기 위해 스냅 샷이라는 새로운 리소스를 만들려고합니다. 나는 모든 것을 올바르게 설정했다고 확신하지만 레일스는 경로를 인식하지 못합니다. 레일 경로를 찾을 수 없지만 레이크 경로에 존재합니다.

project_snapshots POST  /projects/:project_id/snapshots(.:format)           snapshots#create 
project_snapshot PATCH /projects/:project_id/snapshots/:id(.:format)          snapshots#update 
        PUT  /projects/:project_id/snapshots/:id(.:format)          snapshots#update 

그러나 레일 콘솔에서

, 나는 어떤을하지 않습니다 내가 잘 rake routes을 실행할 때

resources :projects do 
    resources :snapshots, only: [:create, :update] 
end 

그것은 나타납니다 :

여기 내 routes.rb에서 관련 발췌 기쁨 :

r = Rails.application.routes 
=> #<ActionDispatch::Routing::RouteSet:0x007faa06b5b730> 

r.recognize_path "/projects/1234/snapshots" 
ActionController::RoutingError: No route matches "/projects/1234/snapshots" 
    from /Users/merus/.rbenv/versions/2.2.5/lib/ruby/gems/2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:840:in `recognize_path' 
    from (irb):4 
    from /Users/merus/.rbenv/versions/2.2.5/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/console.rb:110:in `start' 
    from /Users/merus/.rbenv/versions/2.2.5/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start' 
    from /Users/merus/.rbenv/versions/2.2.5/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console' 
    from /Users/merus/.rbenv/versions/2.2.5/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!' 
    from /Users/merus/.rbenv/versions/2.2.5/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 

작동하지 않는 경우를 대비하여 '리소스'를 '리소스'로 교체해 보았습니다. 주사위는 없다. 여기 뭐가 잘못 됐니?

+0

인식 경로에 대한 소스를 확인하십시오. 당신이 전달하는 환경에서 그것을 지정하지 않으면 method = GET이 기본값이됩니다. 당신은 라우트에 정의 된 그 시그니처가있는 GET 메소드를 가지고 있지 않습니다 - PUT, POST 및 PATCH 만. 난 당신이'r.recognize_path "귀하의 URL로 전화를해야 의심,"방법 : "PUT"' – jaydel

답변

1

인식 _ 경로의 기본값은 HTTP 메소드의 경우 "GET"입니다. GET 메소드로 스냅 샷의 경로를 정의하지 않았습니다. 전달하는 환경에서 HTTP 메소드를 지정해보십시오.

r.recognize_path "/projects/1234/snapshots", method: "POST" 
관련 문제