pathメソッドがなんかおかしい
2ヶ月くらい前に作りかけだった掲示板作成の続きをやっています。
今のスレッド詳細のURLは、
http://localhost/categories/1/posts/1
となっている。
今思えばこのURLって冗長だなと思って、
http://localhost/posts/1
のように書き換えようとしていた。
link_to "Post詳細URL", post_path(1)
と書くと通常なら
/posts/1
と返ってくるはずなのですが、
返ってこない!
[1] pry(#<#<Class:0x007fd165f671b8>>)> link_to "Post", post_path(1) NoMethodError: undefined method `category' for 1:Fixnum [2] pry(#<#<Class:0x007fd165f671b8>>)> link_to "Post", Post.find(1) => "<a href=\"/categories/1/posts/1\">Post</ [3] pry(#<#<Class:0x007fd165f671b8>>)> link_to "Post", post_path(Post.find(1)) => "<a href=\"/categories/1/posts/1\">Post</a>" [4] pry(#<#<Class:0x007fd165f671b8>>)> link_to "Post", category_post_path(Post.find(1)) ActionController::RoutingError: No route matches {:action=>"show", :controller=>"posts", :category_id=>#<Post id: 1, name: "匿名希望", title: "雑談投稿", body: "こここここ", created_at: "2012-08-25 05:51:05", updated_at: "2012-08-25 05:51:05", type: nil, category_id: 1, last_updated_at: "2012-08-25 05:51:05", user_id: nil, password_digest: nil>} from /Users/koji/.rvm/gems/ruby-1.9.3-p194@rails3.2/gems/actionpack-3.2.3/lib/action_dispatch/routing/route_set.rb:532:in `raise_routing_error'
link_toの第二引数は、ARインスタンスがくることを期待しているのだった。。
恐らく
post_path
を呼ぶと
category_post_path
が
呼ばれてる。
内部をいじった覚えはないし、書いてるのは普通ルーティングだと思うのだけど。
ヽ| ・∀・|ノ $ rake routes root / welcomes#index admin_root /admin(.:format) admin/tops#index posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy category_posts GET /categories/:category_id/posts(.:format) posts#index POST /categories/:category_id/posts(.:format) posts#create new_category_post GET /categories/:category_id/posts/new(.:format) posts#new edit_category_post GET /categories/:category_id/posts/:id/edit(.:format) posts#edit category_post GET /categories/:category_id/posts/:id(.:format) posts#show PUT /categories/:category_id/posts/:id(.:format) posts#update DELETE /categories/:category_id/posts/:id(.:format) posts#destroy
ちゃんと定義されている。
category_post GET /categories/:category_id/posts/:id(.:format) posts#show post GET /posts/:id(.:format) posts#show
resources :posts resources :categories do resources :posts do resources :comments end end
うーん。。。
<追記>
controllerでは正しく呼べているのでviewで変な書き方してる疑惑
<追記2>
post_pathと同名のHelperメソッドを定義していました!!!