Ruby onRailsでアンダースコア `_`の代わりにダッシュ` -`を使用したルート


88

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

私は2つのことに驚いています:

  1. グーグル等。それらを区別し続けます。
  2. そのRubyon Railsには、ルーティングでマップ-するための単純なグローバル構成パラメーターがありません_。それともそうですか?

私が持っている最善の解決策は、:asまたは名前付きルートを使用することです。

私の考えは、Railsルーティングを変更して、そのグローバル構成を確認し、コントローラーアクションにディスパッチする前にに変更-すること_です。

もっと良い方法はありますか?


また、URL(およびhtml / css要素ID、名前、クラス)のアンダースコアよりもダッシュの方が好きですが、実装しようとはしていません。Rails 3ではミドルウェアとルーティングが大幅にアップグレードされているため、最初にRails 3に移行してから、これについて心配します。
yfeldblum 2011年

正義に感謝します。アップグレードしてv3に慣れるまで、延期します。
pduey 2011年

回答:


74

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

1
私はRailsを初めて使用します。このような行をどのファイルに追加しますか?
アランW.スミス

5
アンダーソールをハイフンに変換するためのより良い、より速い方法が必要です
carbonr 2013年

2
@carbonr追加した例はどうですか?:)
サンドストローム2014年

@sandstromそれだけです!甘い!
carbonr 2014年

3
残念ながら、このモンキーパッチはRails 5では機能しなくなりました。これにより、#indexと#createを除くすべてがダッシュされます。これらはアンダースコアのままで、厄介なバグを作成します。誰かがRails5の更新されたスクリプトを持っているなら、それは大いにありがたいです。
ケルシーハンナン

3

コントローラとアクションの名前をオーバーロードして、ダッシュを使用できます。

# config/routes.rb
resources :my_resources, path: 'my-resources' do
  collection do
    get 'my-method', to: :my_method
  end
end

コンソールでテストできます。

rails routes -g my_resources
my_method_my_resources GET  /my-resources/my-method(.:format) my_resources#my_method

2

名前付きルートを使用できます。'-'を単語区切り文字として使用できます。ルート.rbでは、

map.name_of_route     'a-b-c',       :controller => 'my_controller', :action => "my_action"

これで、http:// my_application / abcのようなURLは指定されたコントローラーとアクションに移動します。

また、動的URLを作成するため

map.name_of_route    'id1-:id2-:id3',       :controller => 'my_controller', :action => "my_action"

この場合、 'id1、id2、id2はhttpパラメータとしてアクションに渡されます

あなたの行動と見解では、

name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3) 

url'http:// my_application / val1-val2-val3 'に評価されます


3
ルーティングの手動メンテナンスを避けたいので、名前付きルートが出ています。Railsルーティングで置き換えを行い、構成ファイルをタイトに保ちたいだけです。
pduey 2011年

2

コントローラとビューファイルでアンダースコアを使用する場合は、ルートファイルでダッシュを使用するだけで機能します。

get'blog / example-text 'これはこのコントローラーのルートです

def example_text end <-これは私のコントローラーです

example_text.html.erbはファイルです

これが実際のリンクですsite.com/blog/example-text

これは私にとってはうまくいくと思いました、そしてそれはSEOの賢明さを強調するよりも効果的です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.