문제

컨트롤러, 프로필이있는 경우 두 가지 작업 만 가지고 있다고 말합니다. 첫 번째는입니다 list, 이름 목록을 표시합니다. 이 이름이 링크가되기를 원합니다. 그러면 전체 프로필을 표시하는 페이지로 이동합니다. 그래서 두 번째 조치가 필요합니다. view, 그런 다음 매개 변수를 공급하여 볼 수있는 프로파일을 표시 할 수 있습니다.

예를 들어 : 액세스 할 것입니다 /profile/list, 그런 다음 John의 프로필을보고 싶다면 그의 이름을 클릭하여 나를 데려 갈 것입니다. /profile/view/john. 내보기 조치는 John 매개 변수를 읽은 다음 적절한 데이터베이스 쿼리를 만듭니다.

이런 일이 발생하기 위해서는 어떤 변경을해야합니까? 건배.

도움이 되었습니까?

해결책

차라리 기본값 : 컨트롤러/: action/: id 경로를 사용하여 목록에 2 개의 John이있는 경우로부터 보호합니다.

당신이 언급 한 것과 같은 맞춤형 경로를 사용하려면 편집 경로.

map.connect ':controller/:action/:user_name'

이제 프로필/뷰/John과 같은 요청이 귀하에게 연락해야합니다.

@params = {:controller => "profile", :action=> "view", :user_name => "john"}

Params [: user_name] 값을 사용하여 컨트롤러의보기 작업에서 관련 레코드를 찾아 표시하십시오. URL의 user_name 부분에 대한 몇 가지 요구 사항을 설정할 수도 있습니다.

map.connect ':controller/:action/:user_name',
   :requirements => {:user_name => /\w+/}

다른 팁

이름으로 프로파일을 식별하려면 "/profile/view/john"으로 permalink_fu 플러그인을 사용할 수 있습니다.

http://www.seoonrails.com/even-better-loking-urls-with-permalink_fu

이름 복제가있을 때 문제를 해결하지 못할 것입니다 ...

모델이 "사용자"인 경우 to_param 메소드를 무시해야합니다. 이렇게하면 "ID"대신 사용자의 "ID-Name"을 반환 할 수 있습니다. (예 :/프로필/보기/23-John)

알고 있습니다. 정확히 당신이 요청한 것은 아니지만 이것은 쉬운 해결책이어야합니다.

class User < ActiveRecord::Base
  def to_param
    "#{id}-#{name.gsub(/\W/, '-').downcase}"
  end
end

라우팅 구성에 간단한 리소스 선언을 추가하십시오.

map.resources :users
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top