1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on Railsでアンダースコア `_` の代わりにダッシュ `-` を使用したルーティング

2023-04-03 02:09:53

質問

URLにダッシュを使いたい - の代わりにアンダースコア _ を単語の区切り文字として使用します。例えば controller/my-action の代わりに controller/my_action .

2つのことに驚いています。

  1. Google などは、引き続き区別しています。
  2. Ruby on Rails がシンプルでグローバルな設定パラメータを持たないことで、マッピングするために -_ をルーティングに追加します。それとも、そうなるのでしょうか?

私が持っている最良の解決策は :as または名前付きルートです。

私のアイディアは、Railsのルーティングを修正して、そのグローバルな設定をチェックして -_ に変更した後、コントローラのアクションにディスパッチします。

もっと良い方法はないでしょうか?

どのように解決するのですか?

Rails 3以降では、このようにすることができます。

resources :user_bundles, :path => '/user-bundles'


イニシャライザーを使ってRailsを変更する方法もあります。 しかし、これは将来のバージョンで壊れる可能性があるので、お勧めしません (編集: Rails 5では動作しません)。

を使って :path を使うのがよいでしょう。

# Using private APIs is not recommended and may break in future Rails versions.
# https://github.com/rails/rails/blob/4-1-stable/actionpack/lib/action_dispatch/routing/mapper.rb#L1012
#
# config/initializers/adjust-route-paths.rb
module ActionDispatch
  module Routing
    class Mapper
      module Resources
        class Resource
          def path
            @path.dasherize
          end
        end
      end
    end
  end
end