web-dev-qa-db-ja.com

Ruby on Rails

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

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

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

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

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

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

83
pduey

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
71
sandstrom

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

'blog/example-text'を取得しますこれはこのコントローラーへの私のルートです

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

そしてexample_text.html.erbはファイルです

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

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

2
neinx

名前付きルートを使用できます。 Wordの区切り文字として「-」を使用できます。 routes.rbでは、

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

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

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

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

この場合、「id1、id2&id2はhttp paramsとしてアクションに渡されます。

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

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

uRL ' http:// my_application/val1-val2-val 'と評価されます。

2
Kan

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

# 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
Lev Lukomsky