내 URL에서 단어 구분 기호 -
로 밑줄 대신 대시를 사용하고 싶습니다 _
. 예를 들어 controller/my-action
대신 controller/my_action
.
두 가지에 놀랐습니다.
- Google 외. 그들을 계속 구별하십시오.
- 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 현명한 것을 강조하는 것보다 효과적이라고 생각했습니다.