2011-01-01 2 views
0

user 모델과 project 모델이 내 앱에 있습니다. 나는 내 경로에 낮은 우선 순위를 가진 match '/:username' 조건을 추가 할 수, 그것은 단지 하나의 모델이라면이 모두 http://example.com/<username or project name>http://example.com/<username or project name>/edit두 모델을 매핑하여 example.com/ <name>

에 자신의 show/edit 행동을 갖고 싶어. 여러 모델을 사용하여이 작업을 수행하려면 어떻게해야합니까?

+2

사용자 이름이 프로젝트와 같은 경우 또는 그 반대의 경우를 어떻게 처리합니까? – kikito

답변

1

이것은 아마도 좋은 생각이 아닙니다. 권장하지 않습니다. 아마도 당신의 요구를 충족시키는 더 좋은 방법이있을 것입니다. - 무엇이 잘못 되었습니까? example.com/users/123/

그러나 반드시 수행해야한다면 세 번째 컨트롤러를 만들면됩니다. 바로 가기 컨트롤러라고 부릅니다.

먼저 쇼트 컷 컨트롤러로 라우팅해야 표시 및 수정을 위해 :/name 변수가 전달됩니다. 라우팅에 대한 아이디어는 Railscast에서 확인하십시오.

단축키 컨트롤러 동작에서 우선 순위를 지정해야합니다 (사용자와 프로젝트의 이름이 같은 경우). 먼저 주어진 이름과 일치하는 사용자 이름을 확인하고 그/다른 이름을 표시하거나 편집하십시오 프로젝트에 대한보고 후, 그것은과 같이 보일 것이다 (404)

오류 보여 어쨌든

def show 
    if @user = User.find_by_name(params[:name]) 
    render 'users/show' 
    elsif @project = Project.find_by_name(params[:name]) 
    render 'projects/show' 
    else 
    raise ActiveRecord::RecordNotFound, "Error message" 
    end 
end 

에게, 즉, 아마 작동하도록 만들 수 있지만, 다시 나는 그것이 좋은 생각 모르겠어요 수 그리고 나는 그 아이디어에서 당신이 운동해야 할 많은 결함이 있다고 의심합니다. 행운을 빕니다!

관련 문제