[ruby-on-rails] Ruby on Rails에서 밑줄`_` 대신 대시`-`가있는 경로

내 URL에서 단어 구분 기호 -로 밑줄 대신 대시를 사용하고 싶습니다 _. 예를 들어 controller/my-action대신 controller/my_action.

두 가지에 놀랐습니다.

  1. Google 외. 그들을 계속 구별하십시오.
  2. Ruby on Rails에는 라우팅에서 매핑 -할 간단한 전역 구성 매개 변수가 없습니다 _. 아니면 그렇습니까?

내가 가진 최선의 해결책은 :as또는 명명 된 경로 를 사용 하는 것입니다.

내 생각은 Rails 라우팅을 수정하여 해당 전역 구성을 확인 하고 컨트롤러 작업에 디스패치하기 전에 변경 -하는 것 _입니다.

더 좋은 방법이 있습니까?



답변

Rails 3 이상에서는 다음과 같이 할 수 있습니다.

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

또 다른 옵션은 이니셜 라이저를 통해 Rails를 수정하는 것입니다. 나는 이것을 권장하지 않습니다. 차후 버전에서 깨질 수 있기 때문입니다 (편집 : 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


답변

명명 된 경로를 사용할 수 있습니다. ‘-‘를 단어 구분자로 사용할 수 있습니다. route.rb에서

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

이제 http : // my_application / abc 와 같은 URL은 지정된 컨트롤러 및 작업으로 이동합니다.

또한 동적 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 ‘로 평가됩니다.


답변

컨트롤러와 뷰 파일에서 밑줄을 사용하는 경우 경로 파일에서 대시 만 사용하면 작동합니다.

이 컨트롤러에 대한 내 경로입니다.

def example_text end <-이것은 내 컨트롤러입니다

example_text.html.erb는 파일입니다.

그리고 이것은 실제 링크 site.com/blog/example-text입니다.

나는 이것이 나를 위해 일한다고 생각했고 SEO 현명한 것을 강조하는 것보다 효과적이라고 생각했습니다.


답변