Je veux que mes URL utilisent le tiret -
au lieu de souligner _
comme séparateurs de mots. Par exemple controller/my-action
au lieu de controller/my_action
.
Je suis surpris de deux choses:
-
à _
dans le routage. Ou alors?La meilleure solution que j'ai est d'utiliser :as
ou un itinéraire nommé.
Mon idée est de modifier le Rails routage pour vérifier cette configuration globale et changer -
à _
avant de passer à une action du contrôleur.
Y a-t-il une meilleure façon?
Avec Rails 3 et plus tard, vous pouvez faire comme ceci:
resources :user_bundles, :path => '/user-bundles'
Une autre option consiste à modifier Rails, via un initialiseur. Je ne le recommande pas cependant, car il pourrait se casser dans les futures versions (edit: ne fonctionne pas dans Rails 5).
En utilisant :path
comme indiqué ci-dessus est meilleur.
# 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
si vous utilisez des traits de soulignement dans un fichier de contrôleur et de vue, utilisez simplement des tirets dans votre fichier de routes, et cela fonctionnera.
obtenir 'blog/exemple-texte' c'est mon itinéraire pour ce contrôleur
def example_text end <- c'est mon contrôleur
et example_text.html.erb est le fichier
et c'est le lien réel site.com/blog/example-text
j'ai pensé que cela fonctionne pour moi, et c'est plus efficace que ce que souligne le SEO
Vous pouvez utiliser des itinéraires nommés. Cela permettra d'utiliser '-' comme séparateurs Word. Dans routes.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Maintenant, des URL comme http: // my_application/a-b-c iraient au contrôleur et à l'action spécifiés.
Aussi, pour créer des URL dynamiques
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
dans ce cas, 'id1, id2 & id2 seraient passés en tant que paramètres http à l'action
En vous actions et vues,
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
évaluerait l'url ' http: // my_application/val1-val2-val '.
Vous pouvez surcharger les noms de contrôleur et d'action pour utiliser des tirets:
# config/routes.rb
resources :my_resources, path: 'my-resources' do
collection do
get 'my-method', to: :my_method
end
end
Vous pouvez tester dans la console:
Rails routes -g my_resources
my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method