Je veux que mes URL utilisent le tiret -
au lieu du trait de soulignement _
comme séparateurs de mots. Par exemple controller/my-action
au lieu de controller/my_action
.
Je suis surpris par deux choses:
- Google et coll. continuer à les distinguer.
- Que Ruby on Rails ne dispose pas d' un simple paramètre de configuration globale de la carte
-
à_
dans le routage. Ou le fait-il?
La meilleure solution que j'ai est d'utiliser :as
ou une route nommée.
Mon idée est de modifier le routage Rails pour vérifier cette configuration globale et de passer -
à _
avant d'envoyer une action de contrôleur.
Y a-t-il un meilleur moyen?
Réponses:
Avec Rails 3 et versions ultérieures, vous pouvez faire comme ceci:
resources :user_bundles, :path => '/user-bundles'
Une autre option est de modifier Rails, via un initialiseur. Je ne recommande pas cela cependant, car cela pourrait casser dans les versions futures (modifier: ne fonctionne pas dans Rails 5).
Utiliser
:path
comme indiqué ci-dessus est préférable.# 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
la source
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
la source
Vous pouvez utiliser des itinéraires nommés. Cela permettra d'utiliser '-' comme séparateurs de mots. Dans routes.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Désormais, les URL comme http: // my_application / abc 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)
serait évalué à l'url ' http: // mon_application / val1-val2-val3 '.
la source
si vous utilisez des traits de soulignement dans un contrôleur et un fichier de vue, utilisez simplement des tirets dans votre fichier de routes, et cela fonctionnera.
obtenir 'blog / exemple-texte' ceci 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 voici le lien réel site.com/blog/example-text
J'ai pensé que cela fonctionne pour moi, et c'est plus efficace que de souligner le référencement
la source