LoginSignup
2
4

More than 5 years have passed since last update.

実際のディレクトリ構造がいけてなくても見た目のURLだけは綺麗にする方法

Posted at

実際のディレクトリ構造や名前がめちゃくちゃでも、次のように path オプションだけ でURLをスマートにできます。get や match などを別に駆使する必要はありません。

require "action_controller/railtie"
require "action_dispatch/routing/inspector"

app = Class.new(Rails::Application)
app.routes.draw do
  namespace :gomi_api, path: "api" do
    namespace :legacy, path: "" do
      namespace :v3, path: "" do
        resources :douga_list, path: "videos"
      end
    end
  end
end

formatter = ActionDispatch::Routing::ConsoleFormatter.new
puts ActionDispatch::Routing::RoutesInspector.new(Rails.application.routes.routes).format(formatter)
# >>                              Prefix Verb   URI Pattern                    Controller#Action
# >> gomi_api_legacy_v3_douga_list_index GET    /api/videos(.:format)          gomi_api/legacy/v3/douga_list#index
# >>                                     POST   /api/videos(.:format)          gomi_api/legacy/v3/douga_list#create
# >>   new_gomi_api_legacy_v3_douga_list GET    /api/videos/new(.:format)      gomi_api/legacy/v3/douga_list#new
# >>  edit_gomi_api_legacy_v3_douga_list GET    /api/videos/:id/edit(.:format) gomi_api/legacy/v3/douga_list#edit
# >>       gomi_api_legacy_v3_douga_list GET    /api/videos/:id(.:format)      gomi_api/legacy/v3/douga_list#show
# >>                                     PATCH  /api/videos/:id(.:format)      gomi_api/legacy/v3/douga_list#update
# >>                                     PUT    /api/videos/:id(.:format)      gomi_api/legacy/v3/douga_list#update
# >>                                     DELETE /api/videos/:id(.:format)      gomi_api/legacy/v3/douga_list#destroy

include Rails.application.routes.url_helpers
gomi_api_legacy_v3_douga_list_path(1) # => "/api/videos/1"

ここでおもしろいのが path を空にできる ということです。ドキュメントには言及がなかったので、てっきり何かを書かないといけないのかと思っていましたが、試してみるとその階層をなかったことにできました。上のすべての path を空にすると URL は / になったりもしました。さすが Rails よくできてますね。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4