Rails 2.3부터는 매개 변수 이름을 변경하지 않고 #resources
이 제공하는 자동 라우팅을 계속 사용할 수 없습니다. 당신이 :path_prefix
및 :name_prefix
와 articles
을지도 할 수있는 해결 방법으로
:
map.resources :articles, :path_prefix => "https://stackoverflow.com/users/:login",
:name_prefix => "user_"
:path_prefix
는 URL에 영향을, 그리고 당신이이 노선하게 될 겁니다 있도록 :name_prefix
는 생성 된 이름 경로에 영향을 미칩니다
user_articles GET /users/:login/articles(.:format) {:controller=>"articles", :action=>"index"}
POST /users/:login/articles(.:format) {:controller=>"articles", :action=>"create"}
new_user_article GET /users/:login/articles/new(.:format) {:controller=>"articles", :action=>"new"}
edit_user_article GET /users/:login/articles/:id/edit(.:format) {:controller=>"articles", :action=>"edit"}
user_article GET /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"show"}
PUT /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"update"}
DELETE /users/:login/articles/:id(.:format) {:controller=>"articles", :action=>"destroy"}
일반적인 규칙의 - 엄지 손가락으로하지만, 나는 당신이 당신의 질문에 게시 라우팅과, :user_id
의 레일 기본 규칙으로 다루고 싶어요. :id
과 :user_id
은 반드시 "숫자 식별자"를 의미하지 않는다는 것을 일반적으로 이해합니다. 이는 "리소스 식별자"를 의미합니다. 그리고 기본 규칙을 고수함으로써 Rails에서 자원 경로를 사용하는 모든 사람이 코드를 이해하기 쉬워집니다.
자원에 숫자가 아닌 식별자를 사용하려면 모델에서 #to_param
을 다시 정의하기 만하면됩니다. 그런 다음 컨트롤러에서 숫자 ID 대신이 식별자 (예 : User#find_by_login!
)를 찾을 수있는 파인더를 사용해야합니다.
p.s. 나는 Merb의 라우팅 시스템이이 기능을 가지고 있기 때문에 이것을 주로 요구합니다. – newtonapple