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


88

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

두 가지에 놀랐습니다.

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

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

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

더 좋은 방법이 있습니까?


또한 URL (html / css 요소 ID, 이름 및 클래스)에서 밑줄보다 대시를 선호하지만 구현하려고 시도하지 않았습니다. 먼저 레일 3으로 마이그레이션 한 다음 레일 3에는 미들웨어 및 라우팅에 대한 많은 대폭 업그레이드가 포함되어 있으므로 이에 대해 걱정할 것입니다.
yfeldblum 2011 년

감사합니다. 업그레이드하고 v3에 익숙해 질 때까지 기다리겠습니다.
pduey 2011 년

에 대한이 문서를 참조하십시오 레일에 하이픈 경로
Yarin

답변:


74

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

1
저는 Rails를 처음 사용합니다. 이와 같은 줄을 어떤 파일에 추가 하시겠습니까?
Alan W. Smith

5
하이픈 undersore이 모든 경로 변환하는 더 빠른 방법이 있어야한다
carbonr

2
@carbonr 방금 추가 한 예제는 어떻습니까? :)
sandstrom 2014

@sandstrom 그게 다야! 단!
carbonr

3
슬프게도이 원숭이 패치는 Rails 5에서 더 이상 작동하지 않습니다. 이것은 #index와 #create를 제외한 모든 것을 멋지게 만들 것입니다. Rails 5에 대한 업데이트 된 스크립트가있는 사람이 있다면 많은 도움이 될 것입니다.
Kelsey Hannan

3

컨트롤러 및 작업 이름을 오버로드하여 대시를 사용할 수 있습니다.

# 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

명명 된 경로를 사용할 수 있습니다. '-'를 단어 구분자로 사용할 수 있습니다. 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 '로 평가됩니다.


3
라우팅의 수동 유지 관리를 피하고 싶으므로 명명 된 경로가 빠져 있습니다. 난 그냥 레일 라우팅이 나를 대체하고 구성 파일을 단단히 유지하기를 원합니다.
pduey 2011 년

2

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

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.