Mam prosty model użytkownik z pojedynczej zagnieżdżonego Profile zasobu więc moim routes.rb mam:Szyny Zagnieżdżony Singular zasobów Routing
resources :users do
resource :profile, :only => [:edit, :update, :show]
end
To generuje oczekiwanych tras:
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 Utworzono prostą metodę aktualizacji kontrolera, która aktualizuje model, a następnie przekierowuje po pomyślnej aktualizacji:
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
Problem polega na tym, że po przesłaniu formularza formularz przekierowuje do witryny mydomain.com/users/4/profile.22, gdzie 22 jest identyfikatorem profilu. Najwyraźniej zdumiewa to kontrolerów, ponieważ routing interpretuje "22" jako format.
Moje pytanie brzmi, , w jaki sposób mogę to przekierować na mydomain.com/users/4/profile zamiast tego? Próbowałem następujące wariacje na rachunku redirect_to bez skutku, wszystkie one prowadzą do tego samego błędnego adresu URL:
redirect_to(user_profile_path(@user), ...)
redirect_to(user_profile_path(@user, @profile), ...)
redirect_to([@user, @profile], ...)
redirect_to(@profile, ...)
Co więcej, za pomocą „user_profile_path (@user)” gdzie indziej produkuje prawidłowy adres URL.
Wszelkie pomysły? Och, i używam Rails 3.0.0 i Ruby 1.9.2, jeśli to pomaga.
Mam również ten problem.Routing powinien być wystarczająco inteligentny, aby wiedzieć, że ma do czynienia z @profile, który jest liczbą pojedynczą i nie umieszcza identyfikatora w adresie URL. Mam nadzieję, że istnieje sposób obejścia tego problemu, ponieważ mam do czynienia z polimorficznym adresem URL z konieczności, ponieważ nie wiem, jaki jest jeden z obiektów nadrzędnych (w twoim przypadku nie wiedziałbym, że @user jest koniecznie Klasa użytkownika). –
To jest długie stantowanie [bug in rails] (https://github.com/rails/rails/issues/1769) –