Routes avec Dash `-` lieu de Souligné` _` dans Ruby on Rails
-
26-10-2019 - |
Question
Je veux que mes urls à utiliser dash -
au lieu de _
underscore comme séparateurs de mots. Par exemple controller/my-action
au lieu de controller/my_action
.
Je suis surpris par deux choses:
- Google et al. continuer à les distinguer.
- que Ruby on Rails ne dispose pas d'un simple paramètre de configuration globale pour la carte
-
à_
dans le routage. Ou est-il?
La meilleure solution que j'ai est d'utiliser :as
ou un itinéraire nommé.
Mon idée est de modifier le routage Rails pour vérifier que la configuration globale et le changement -
à _
avant d'envoyer à une action du contrôleur.
Y at-il une meilleure façon?
La solution
Avec Rails 3 et vous pouvez ensuite faire comme ceci:
resources :user_bundles, :path => '/user-bundles'
Une autre option consiste à modifier Rails, par l'intermédiaire d'un initialiseur. Je ne recommande pas bien, car il peut se casser dans les versions futures.
Utilisation :path
comme indiqué ci-dessus est mieux.
# 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
Autres conseils
Vous pouvez utiliser des itinéraires nommés. Elle permettra en utilisant « - » comme mot seperators. En routes.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
http: //. Mon_application / a-b-c irait au contrôleur spécifié et de l'action
En outre, pour la création d'urls dynamiques
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
dans ce cas « ID1, ID2 et ID2 serait passé http params à l'action
Dans vos actions et vues,
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
évaluerait à url ' http: // mon_application / val1-val2-val3 .
si vous utilisez underscores dans un fichier du contrôleur et vue puis il suffit d'utiliser des tirets dans votre fichier routes, et il fonctionnera ..
get 'blog / texte par exemple' ceci est ma route pour ce contrôleur
def example_text fin <- ceci est mon contrôleur
et example_text.html.erb est le fichier
et c'est le lien réel site.com/blog/example-text
je me suis dit que c'est fonctionne pour moi, et il est plus efficace que underscores SEO sage
Vous pouvez surcharger les contrôleurs et action à tirets d'utilisation:
# 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