Маршруты с Dash `-` вместо подчеркивания` _` в Ruby On Rails

StackOverflow https://stackoverflow.com/questions/5334465

Вопрос

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

Я удивлен двумя вещами:

  1. Google et al. Продолжайте различать их.
  2. Что 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top