2013-01-18 2 views
0

두 번 검사는 현재, 나는레일 3 루트 일치

match '/:username' => 'profiles#show', :as => :public_profile 

가 지금은이 형식을 사용하고, 다른 경로에 대한 또 다른 경기를 만들기 위해 다른 매개 변수를 추가 할 내 routes.rb에 있습니다. 설명하는 방법을 모르지만 예제를 들어 보겠습니다. 상술과 일치하는 가정 :

http://example.com/foo_username 

을이 foo_username의 프로필에 연결된다. 지금은이 같은 URL을 갖고 싶어 :

이 링크를 클릭하면 해당 ID (슬러그) 등의 5 나의 이야기,이 이야기를 이야기 번호 쇼 액션에 가야

는 제공된 사용자 이름에 의해 소유

http://example.com/foo_username/5-my-story 
경로에. 경로에서 어떻게 구성합니까? 나는이 일을 시도 :

match '/:username/:id' => 'stories#show', :as => public_story 

그것은 작동하지만 사용자 이름의 매개 변수를 변경할 때, 여전히 이야기로 이동합니다. 그것은 사용자 이름이 이야기를 소유하지 않기 때문에 찾을 수없는 경로를 반환해야합니다.

어떻게 구현하는 것이 가장 좋습니까? 그런 다음 @story 있는지 확인해야 당신이

@user = User.find_by_username(params[:username]) 
@story = @user.stories.find(params[:id]) 

처럼 어쩌면 사용자의 이야기를이를 제한해야

@story = Story.find(params[:id]) 

: 컨트롤러에서

답변

0

, 당신은 이런 식으로 뭔가를해야합니다 그렇지 않으면 404를 반환합니다.

0

필요에 따라이 적응 :

# stories_controller.rb 

def show 
    @story = Story.find(params[:id]) 
    raise ActiveRecord::RecordNotFound unless @story.user.name == params[:username] 
    # ... 
end