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メソッドを定義していました!!!