Chcę, aby moje adresy URL używały myślnika -
zamiast podkreślenia _
jako separatorów słów. Na przykład controller/my-action
zamiast controller/my_action
.
Dziwią mnie dwie rzeczy:
- Google i in. nadal je rozróżniać.
- Że Ruby on Rails nie posiada prosty, globalny parametr konfiguracyjny do mapy
-
, aby_
w routingu. Czy to prawda?
Najlepszym rozwiązaniem jest użycie :as
nazwanej trasy.
Moim pomysłem jest zmodyfikowanie routingu Railsów, aby sprawdzić tę globalną konfigurację i zmienić -
na_
przed wysłaniem do akcji kontrolera.
Czy jest lepszy sposób?
Odpowiedzi:
Z Railsami 3 i nowszymi możesz zrobić tak:
resources :user_bundles, :path => '/user-bundles'
Inną opcją jest modyfikacja Railsów poprzez inicjator. Nie polecam tego jednak, ponieważ może się zepsuć w przyszłych wersjach (edit: nie działa w Railsach 5).
Używanie,
:path
jak pokazano powyżej, jest lepsze.# 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
źródło
Możesz przeciążać nazwy kontrolerów i akcji, aby używać myślników:
# config/routes.rb resources :my_resources, path: 'my-resources' do collection do get 'my-method', to: :my_method end end
Możesz przetestować w konsoli:
rails routes -g my_resources my_method_my_resources GET /my-resources/my-method(.:format) my_resources#my_method
źródło
Możesz używać nazwanych tras. Pozwoli to na użycie „-” jako separatorów słów. W route.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Teraz adresy URL, takie jak http: // moja_aplikacja / abc, będą kierować do określonego kontrolera i akcji.
Również do tworzenia dynamicznych adresów URL
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
w tym przypadku 'id1, id2 i id2 zostaną przekazane jako parametry http do akcji
W swoich działaniach i poglądach
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
zwróci adres URL „ http: // my_application / val1-val2-val3 ”.
źródło
jeśli używasz podkreśleń w kontrolerze i wyświetlasz plik, po prostu użyj myślników w pliku tras i zadziała.
get „blog / example-text” to jest moja trasa dla tego kontrolera
def example_text end <- to jest mój kontroler
a example_text.html.erb to plik
a to jest rzeczywisty link site.com/blog/example-text
Doszedłem do wniosku, że to działa dla mnie i jest bardziej skuteczne niż podkreśla mądrego SEO
źródło