Wordの区切り文字として、アンダースコア-
ではなくダッシュ_
をURLに使用したい。たとえば、controller/my-action
ではなくcontroller/my_action
。
私は2つのことに驚いています。
-
を_
にマップするための単純なグローバル構成パラメーターがありません。またはしますか?私の最善の解決策は、: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
コントローラとビューファイルでアンダースコアを使用する場合は、ルートファイルでダッシュを使用するだけで機能します。
'blog/example-text'を取得しますこれはこのコントローラーへの私のルートです
def example_text end <-これは私のコントローラーです
そしてexample_text.html.erbはファイルです
これは実際のリンクですsite.com/blog/example-text
これは私にとってはうまくいくと思いました、そしてそれはSEOを賢明に強調するよりも効果的です
名前付きルートを使用できます。 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 'と評価されます。
コントローラ名とアクション名をオーバーロードしてダッシュを使用できます。
# 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