Rails 용 라우팅 리소스에서 : id 매개 변수의 이름을 변경합니다.
동적 매개 변수 슬롯을 변경하는 방법을 둘러 보았고 정확한 작업을 수행하는이 게시물을 찾았습니다. 게시물은 https://thoughtbot.com/blog/rails-patch-change-the-name-of-the-id-parameter-in입니다.
기본적으로 수행하는 작업은 다음과 같은 경우입니다.
map.resources :clients, :key => :client_name do |client|
client.resources :sites, :key => :name do |site|
site.resources :articles, :key => :title
end
end
이러한 경로는 다음 경로를 만듭니다.
/clients/:client_name
/clients/:client_name/sites/:name
/clients/:client_name/sites/:site_name/articles/:title
한 가지 해결책은 def to_param
모델 의 메서드 를 재정의하는 것이지만 모델 자체를 건드리지 않고 이것을 원합니다.
하지만 Rails 2.x 용이므로 어떻게 Rails 3에서도 동일한 결과를 얻을 수 있습니까?
최신 정보
이 앱은 몽고 이드를 사용하고 있습니다. AR이 아닙니다. 따라서 친절한 보석은 afaik으로 사용할 수 없습니다.
레일 4 및 5
Rails 4에서 :param
옵션이 추가되었는데, 이것은 당신이 찾고있는 것을 정확히하는 것 같습니다. Rails 4 코드 와 비교 하여 Rails 3 코드를 살펴볼 수 있습니다 .
세부
routes.rb
파일 에서 쉽게 구현할 수 있습니다 .
# config/routes.rb
resources :posts, param: :slug
# app/controllers/posts_controller.rb
# ...
@post = Post.find_by(slug: params[:slug])
# ...
Rails 4가 출시 될 때이 기능은 Rails 가이드에 문서화되어 있습니다.
레일스 3
불행히도 Rails 3에서는에 대한 :key
옵션 resources
이 제거 되었기 때문에 추가 옵션을 전달하는 것만으로는 더 이상 이런 방식으로 생성 된 경로의 이름을 쉽게 변경할 수 없습니다.
세부
저는 여러분이 작년에 여러분이 원하는 방식으로 애플리케이션을 이미 어떻게 든 작동 시켰다고 가정하지만, Rails 3에서 설명한 효과를 얻을 수있는 방법에 대해 설명하겠습니다 routes.rb
. to_param
방법 보다 약간 더 많은 작업이 필요합니다 . 당신은 여전히 루트 사용자 지정 매개 변수를 사용하여 정의 정의 할 수 있습니다 scope
및 match
(또는 그것의 사촌 get
, put
, post
, 및 delete
). 매처에서 원하는 매개 변수 이름을 작성하기 만하면됩니다.
get 'clients/:client_name', :to => 'clients#show', :as => client
scope 'clients/:client_name' do
get 'sites/:name', :to => 'sites#show', :as => site
end
resources
자동으로 생성 되는 모든 경로를 수동으로 추가해야 하지만 원하는 것을 얻을 수 있습니다. 또한 추가 블록 :controller
과 함께 옵션을 효과적으로 사용하여 일부 반복을 제거 할 수 있습니다.scope
scope
수정 (2014 년 5 월 8 일) : 답변에 Rails 3 및 4에 대한 정보가 포함되어 있음을 더 분명하게 만드십시오. 코드 링크를 업데이트하여 정확한 줄 번호로 이동하고 더 오랜 기간 동안 작동하도록 커밋하십시오.
수정 (2014 년 11 월 16 일) : Rails 4가 현재 최상위에 있어야하며 현재 Rails의 현재 버전이었던만큼 관련 정보를 포함해야합니다.
편집 (2016 년 8 월 9 일) : 솔루션이 여전히 Rails 5에서 작동한다는 것을 반영하고 오래된 링크를 업데이트합니다.
Rails 4에서는 param 옵션을 전달하여 : id 매개 변수를 변경합니다. 예를 들어 resources :photos, param: :photo_name
/ photos / : photo_name을 생성합니다.
내가 당신을 올바르게 이해한다면, 당신이 원하는 것은 당신의 URL client_name
대신에 갖는 것입니다 id
.
You can do that by overriding the to_param
method in your model. You can get more information here.
There's a gem for that, just like there's a gem for everything ;)
I've been using FriendlyId for this kind of behaviour in rails 3.
It will require you to add some code to your model though, like this:
class Client < ActiveRecord::Base
has_friendly_id :name
end
...and if your clients don't have URI compatible names, you might want to use a slug for that, which you can do with has_friendly_id :name, :use_slug => true
. When using slugs you'll obviously need to persist them to the database as well though.
And as already mentioned, you can still use the to_param
trick with rails 3, as documented here. I find FriendlyId a bit more versatile though.
In Rails 3 you can rename the id keys by using a combination of namespaces and scopes like this (not very nice though):
namespace :clients do
scope "/:client_name" do
namespace :sites do
scope "/:name" do
post "/:title" => "articles#create"
...
end
end
end
end
'Programming' 카테고리의 다른 글
다차원 배열을 텍스트 파일에 쓰는 방법은 무엇입니까? (0) | 2020.08.18 |
---|---|
로봇이 양식을 자동으로 채우는 것을 방지하는 방법은 무엇입니까? (0) | 2020.08.18 |
Electron 앱에서 console.log () 사용 (0) | 2020.08.18 |
PHP를 사용하여 파일을 보낼 때 다운로드가 재개됩니까? (0) | 2020.08.18 |
자식이 터미널에서 잘못된 사용자로 푸시 (0) | 2020.08.18 |