Я хочу, чтобы в моих URL-адресах в качестве разделителей слов использовалось тире -
вместо подчеркивания _
. Например controller/my-action
вместо controller/my_action
.
Меня удивляют две вещи:
- Google et al. продолжать различать их.
- В этом Ruby on Rails нет простого глобального параметра конфигурации, который можно было бы сопоставить
-
с_
маршрутизацией. Или нет?
Лучшее решение - использовать :as
или именованный маршрут.
Моя идея состоит в том, чтобы изменить маршрутизацию Rails, чтобы проверить эту глобальную конфигурацию и изменить -
ее _
перед отправкой в действие контроллера.
Есть ли способ лучше?
Ответы:
В Rails 3 и новее вы можете сделать следующее:
resources :user_bundles, :path => '/user-bundles'
Другой вариант - изменить Rails через инициализатор. Я не рекомендую это делать, так как в будущих версиях это может сломаться (edit: не работает в 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
источник
Вы можете перегрузить имена контроллеров и действий, чтобы использовать тире:
# 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
источник
Вы можете использовать именованные маршруты. Это позволит использовать «-» в качестве разделителей слов. В routes.rb,
map.name_of_route 'a-b-c', :controller => 'my_controller', :action => "my_action"
Теперь URL-адреса типа http: // my_application / abc будут переходить к указанному контроллеру и действию.
Также для создания динамических URL
map.name_of_route 'id1-:id2-:id3', :controller => 'my_controller', :action => "my_action"
в этом случае 'id1, id2 и id2 будут переданы как параметры http для действия
В твоих действиях и взглядах,
name_of_route_url(:id1=>val1, :id2=>val2, :id3=>val3)
будет оценивать URL-адрес http: // my_application / val1-val2-val3 .
источник
если вы используете подчеркивания в контроллере и в файле просмотра, просто используйте дефисы в своем файле маршрутов, и он будет работать.
получить 'blog / example-text' это мой маршрут для этого контроллера
def example_text end <- это мой контроллер
а example_text.html.erb - это файл
а это фактическая ссылка site.com/blog/example-text
я подумал, что это работает для меня, и это более эффективно, чем подчеркивает SEO
источник