Rails 4 – 资源id路由的显式模型名称
在routes.rb
定义以下路由时:
resources :streams
Rails生成以下URL:
streams GET /streams(.:format) POST /streams(.:format) new_stream GET /streams/new(.:format) edit_stream GET /streams/:id/edit(.:format) stream GET /streams/:id(.:format) PATCH /streams/:id(.:format) PUT /streams/:id(.:format) DELETE /streams/:id(.:format)
我想有一个显式的资源ID,即:stream_id
而不是:id
。
编辑:
对于简单的资源,解决方案就像@ user2262149和@vimsha一样:
resources :streams, :param => :stream_id
问题在于嵌套资源。 如果我这样做:
resources :streams do resource :comment, :param => :comment_id end
我会得到这条路线(没关系):
stream_comments GET streams/:stream_id/comments(.:format)
但另一方面,对于父资源(同样, :id
而不是:stream_id
):
streams GET streams/:id(.:format)
所以….
如果我尝试解决它,请将:param => :stream_id
到父资源:
resources :streams, :param => :stream_id do resource :comment, :param => :comment_id end
然后对于父资源,路由是正常的:
stream GET /api/streams/:stream_id(.:format)
但我对儿童资源一团糟:
stream_comments GET /api/streams/:stream_stream_id/comments(.:format)
你知道如何解决这个问题吗?
我不确定这是不是你要找的,但在你的routes.rb
,
如果你使用
resources :streams, param: :stream_id
Rails将生成以下URL:
streams GET /streams(.:format) streams#index POST /streams(.:format) streams#create new_stream GET /streams/new(.:format) streams#new edit_stream GET /streams/:stream_id/edit(.:format) streams#edit stream GET /streams/:stream_id(.:format) streams#show PATCH /streams/:stream_id(.:format) streams#update PUT /streams/:stream_id(.:format) streams#update DELETE /streams/:stream_id(.:format) streams#destroy
希望这可以帮助
更新:
我不确定这是否是最佳做法,或者是否有更好的方法,但如果您尝试:
resources :streams, param: :stream_id resources :streams, only: [] do resource :comment, param: :comment_id end
Rails会生成以下URL:
streams GET /streams(.:format) streams#index POST /streams(.:format) streams#create new_stream GET /streams/new(.:format) streams#new edit_stream GET /streams/:stream_id/edit(.:format) streams#edit stream GET /streams/:stream_id(.:format) streams#show PATCH /streams/:stream_id(.:format) streams#update PUT /streams/:stream_id(.:format) streams#update DELETE /streams/:stream_id(.:format) streams#destroy stream_comment POST /streams/:stream_id/comment(.:format) comments#create new_stream_comment GET /streams/:stream_id/comment/new(.:format) comments#new edit_stream_comment GET /streams/:stream_id/comment/edit(.:format) comments#edit GET /streams/:stream_id/comment(.:format) comments#show PATCH /streams/:stream_id/comment(.:format) comments#update PUT /streams/:stream_id/comment(.:format) comments#update DELETE /streams/:stream_id/comment(.:format) comments#destroy
希望这可以帮助
尝试
resources :streams, :param => :stream_id
更新:
这样做会发生什么?
resources :streams, :param => :stream_id do resource :comment, :param => :comment_id end
类似于上面的post,但没有[]:我用过:
resources :tickets, param: :ticket_id resources :tickets do resources :entries, param: :entry_id end