Маршруты с Dash `-` вместо Underscore` _` в Ruby on Rails - PullRequest
79 голосов
/ 17 марта 2011

Я хочу, чтобы мои URL-адреса использовали тире - вместо подчеркивания _ в качестве разделителей слов.Например, controller/my-action вместо controller/my_action.

Меня удивляют две вещи:

  1. Google et al.продолжать различать их.
  2. В Ruby on Rails нет простого глобального параметра конфигурации для сопоставления - с _ в маршрутизации.Или это?

Лучшее решение, которое у меня есть, - использовать :as или именованный маршрут.

Моя идея состоит в том, чтобы изменить маршрутизацию Rails для проверки этой глобальной конфигурации и изменить - до _ до отправки на контроллер действия.

Есть ли лучший способ?

Ответы [ 4 ]

65 голосов
/ 17 октября 2011

С Rails 3 и более поздними версиями вы можете сделать так:

resources :user_bundles, :path => '/user-bundles'

Другой вариант - модифицировать Rails через инициализатор. Я не рекомендую это, хотя, это может сломаться в будущих версиях.

Лучше использовать :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
2 голосов
/ 23 июля 2017

Вы можете перегрузить имена контроллеров и действий, чтобы использовать тире:

# 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
2 голосов
/ 02 января 2017

если вы используете подчеркивания в контроллере и просматриваете файл, просто используйте тире в файле маршрутов, и это будет работать ..

get 'blog / example-text', это мой маршрут для этого контроллера

def example_text конец <- это мой контроллер </p>

и example_text.html.erb - это файл

и это фактическая ссылка site.com/blog/example-text

Я подумал, что это работает для меня, и это более эффективно, чем подчеркивает SEO мудрый

2 голосов
/ 17 марта 2011

Вы можете использовать именованные маршруты. Это позволит использовать «-» в качестве разделителей слов. В маршрутах .rb,

map.name_of_route     'a-b-c',       :controller => 'my_controller', :action => "my_action"

Теперь URL-адреса типа http://my_application/a-b-c перейдут к указанному контроллеру и выполнят действие.

Также для создания динамических 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'.

...