2016-07-13 10 views
0

私は、ProjectsControllerを乱雑にするのではなく、独自のリソースであるべきであるいくつかのアクションを統合するために、Snapshotという新しいリソースを作成しようとしています。私はすべてを正しく設定したと確信していますが、Railsはルートを認識しません。Railsルートは見つかりませんが、レーキルートに存在します

ここに私のroutes.rbをから関連の抜粋です:

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

私はちょうど罰金rake routesを実行したときにそれが現れます:

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 

しかし、レールコンソールで、私はいずれかを得ることはありませんjoy:

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

aware_pathのソースを確認してください。渡す環境で指定しないと、デフォルトではmethod = GETになります。ルートに定義されたそのシグネチャを持つGETメソッドはありません(PUT、POST、PATCHのみ)。私はそれを 'r.recognize_path"あなたのURLと呼ぶ必要があると思う "、方法:" PUT " – jaydel

答えて

1

recognition_pathは、HTTPメソッドではデフォルトで「GET」です。 GETメソッドを使用してスナップショットのルートを定義していません。渡した環境でHTTPメソッドを指定してみてください:

r.recognize_path "/projects/1234/snapshots", method: "POST" 
関連する問題