2011-09-01 6 views
0

/:user_iduser_id은 정수가 아니라 NM-001과 같은 다른 문자를 사용하는 사용자 정의 ID 인 경우이 경로로 전달할 수 있는지 궁금합니다. 그렇다면 내 컨트롤러에는 @user = User.find(params[:user_id])이 있습니다. 그러면보기가 <%= @user.name %>RoR v3 라우팅 질문이 있으십니까?

+0

예 가능합니다. 이'user_id' 문자열이 테이블의 기본 키인지 아닌지 여부 기본 키가 아닌 경우'find' 대신'find_by_user_id'를 사용해야합니다. 기본 키인 경우'User' 모델에게 기본 키가'id' 대신에'user_id'라고 말해야합니다. – Mischa

+0

@mischa'user_id'이 (가) 내 기본 키가 아닙니다. 그래서 지금 당신이 말한 것을 시도해 보겠습니다. – camelCaseD

답변

6

예, 이러한 경로를 사용할 수 있습니다. 당신의 :user_id 마침표를 포함 할 경우, 당신은 형식 지정자로 :user_id.whatever 부분을 해석하는 시도에서 레일을 유지하기 위해 경로 옵션에서

:constraints => { :user_id => /.*/ } 

을 포함 할 수 있습니다.

그러면 컨트롤러에 params[:user_id]이 생기고 원하는대로 설정할 수 있습니다. 당신은 아마 코멘트에 mischa는 말을하고 싶은 것 : 당신이 정말로 경로로 /:user_id을 사용하려는 경우

@user = User.find_by_user_id(params[:user_id]) 

또한, 당신이 당신의 사용자 ID 아무도과 일치하지 있는지 확인하고 싶을 것이다 당신의 현재 또는 미래의 최상위 경로.

+0

내 컨트롤러'@user = User.find (params [: user_id])'에서 이것을 시도하면 내보기'%% @ user.name %>'내 경로 ID가없는 사용자를 찾을 수 없습니다. '오류를 반환합니다. – camelCaseD

+0

@ Leozar100 : 컨트롤러가'find_by_user_id'를 다음과 같이 사용하고 있어야합니다 : '사용자 : 일치'/ : user_id ', : mischa는 어제의 논평에서 언급했다. –

+0

오, 이제 find_by_user_id 메소드는 argams로'params [: user_id]'를 사용합니다. 고마워 – camelCaseD

관련 문제