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