는 나의 routes.rb에서 내가 가진 :레일은 중첩 된 단수 자원 라우팅 나는 단수 중첩 된 프로파일 자원 간단한 사용자 모델을 가지고
edit_user_profile GET /users/:user_id/profile/edit(.:format) {:action=>"edit", :controller=>"profiles"}
user_profile GET /users/:user_id/profile(.:format) {:action=>"show", :controller=>"profiles"}
user_profile PUT /users/:user_id/profile(.:format) {:action=>"update", :controller=>"profiles"}
I :
resources :users do
resource :profile, :only => [:edit, :update, :show]
end
이것은 예상 경로를 생성 모델을 업데이트하고 성공적인 업데이트시 리디렉션하는 간단한 컨트롤러 업데이트 메서드가 만들어졌습니다.
def update
@profile = Profile.find_by_user_id(params[:user_id])
@user = User.find_by_id(params[:user_id])
respond_to do |format|
if @profile.update_attributes(params[:profile])
format.html { redirect_to(user_profile_path(@user, @profile), :notice => 'Profile was successfully updated.') }
else
# ...
end
end
end
문제는 양식이 제출되면 양식이 mydomain.com/users/4/profile.22로 리디렉션됩니다. 여기서 22는 프로필의 ID가됩니다. 라우팅은 '22'를 형식으로 해석하기 때문에 분명히 이것은 컨트롤러를 혼란스럽게합니다.
내 질문은 어떻게 mydomain.com/users/4/profile로 리다이렉트 할 수 있습니까?
무엇보다redirect_to(user_profile_path(@user), ...)
redirect_to(user_profile_path(@user, @profile), ...)
redirect_to([@user, @profile], ...)
redirect_to(@profile, ...)
는 'user_profile_path (@user를)'를 사용하여 다른 곳에서 올바른 URL을 생성합니다 나는 그들이 같은 잘못된 URL에있는 모든 결과, 효과 없음에 redirect_to 문에 다음과 같은 변화를 시도했습니다.
아이디어가 있으십니까? 아, 레일즈 3.0.0과 루비 1.9.2가 도움이된다면 사용하고 있습니다.
이 문제도 발생합니다.라우팅은 그것이 유일하고 URL에 id를 넣지 않는 @profile을 처리한다는 것을 알기에 충분히 똑똑해야합니다. 부모 객체의 클래스 1이 무엇인지 알지 못해서 다형성 URL을 처리하고 있기 때문에이 문제를 해결할 수있는 방법이 있기를 바랍니다 (@ 사용자는 필자가 사용자 클래스). –
이것은 [레일의 버그] (https://github.com/rails/rails/issues/1769)라는 오랜 상처입니다. –