나는 github이 중첩 된 URL과 같은 것을하고 싶습니다. How do I route user profile URLs to skip the controller?과 같은 방법을 사용하고 있지만 어떻게 진행해야하는지 잘 모릅니다.복잡한 레일스 라우팅
예를 들어 커밋을 보면 컨트롤러에 커밋이있는 ': user/: repo/commit/: sha'가 있습니다. 이 유형의 중첩 된 리소스를 어떻게 복제합니까?
감사합니다 :)나는 github이 중첩 된 URL과 같은 것을하고 싶습니다. How do I route user profile URLs to skip the controller?과 같은 방법을 사용하고 있지만 어떻게 진행해야하는지 잘 모릅니다.복잡한 레일스 라우팅
예를 들어 커밋을 보면 컨트롤러에 커밋이있는 ': user/: repo/commit/: sha'가 있습니다. 이 유형의 중첩 된 리소스를 어떻게 복제합니까?
감사합니다 :)하면 커밋이 사용하는 편안하고 컨트롤러입니다. 대신이 작업을 수행 할 수 있습니다 :
가 당신이 결코 커밋 ID로 URL의 ID 부분을 번역되지 것입니다 경우는, 다시http://yoursite.tld/:user/:repo/commit/:id
과 같이 표준 편안하고 경로를 생성합니다
, 그럼 거기에
map.resource :commits, :path_prefix => ':user/:repo', :as => 'commit'
: sha 값으로 사용할 수 없습니다.
예 :
class CommitController < ApplicationController
def show
@commit = Commit.find(:first, :conditions => {:sha => params[:id]})
end
...
end
또한 샤 값을 반환 확약 모델에 타고 넘는 to_param 할 수 있습니다.
class Commt < ActiveRecord::Base
...
def to_param
sha
end
end
이제 link_to commit_url(@commit, :user => current_user, :repo => @repo)
은 귀하의 체계와 일치하는 URL을 제공합니다.
어떻게
map.connect ':user/:repo/commit/:sha', :action => :index
또는 당신이 편안하고 경로를 필요로하는 경우 map.resource
대신 map.connect
를 사용
컨트롤러에서 URL 정보는 params에서 검색 할 수 있습니다. 예를 들어 params[:user]
은 사용자 이름을 반환합니다.
경로 이름은 원하는대로 지정할 수 있으며 사용하려는 컨트롤러와 작업을 지정할 수 있습니다.
예를 들어, 당신은 할 수 있습니다
map.connect ':user/:repo/commit/:sha', :controller => 'transactions', :action => 'commit'
이 '거래'컨트롤러에서 '커밋'방법에 요청을 보낼 것입니다.
다른 변수는 다음 컨트롤러 사용 PARAMS에 액세스 할 수 있습니다 샤 대신 ID의 기록을 찾을 :
@user = User.find(params[:user])
@repo = Repo.find(params[:repo])
당신이 가지고있는 문제는 정확히 무엇입니까? 시도한 것은 무엇이고 효과가없는 것은 무엇입니까? github이 동일한 경로를 사용하려면 동일한 경로를 사용하십시오. – Eilon
그 안에 중첩 된 리소스를 가질 수 있기를 원했고, map.with_options : path_prefix => '/ : user'do ...로 처리 할 수 있다고 생각했습니다. –