Tengo un modelo de usuario sencilla, con un recurso anidado perfil singular así que en mi routes.rb que tengo:rieles de enrutamiento anidada de Recursos Singular
resources :users do
resource :profile, :only => [:edit, :update, :show]
end
Esto genera las rutas esperados:
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 'he creado un método de actualización de controlador simple que actualiza el modelo y luego vuelve a dirigir a la actualización correcta:
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
El problema es que una vez que se envía el formulario, el formulario redirige a mydomain.com/users/4/profile.22, donde 22 pasa a ser la identificación del perfil. Claramente, esto confunde a los controladores ya que el enrutamiento interpreta el '22' como el formato.
Mi pregunta es, ¿cómo hago para redireccionar a mydomain.com/users/4/profile en su lugar? que he probado las siguientes variaciones en el estado redirect_to a ningún efecto, todos ellos resultado en la misma dirección URL incorrecta:
redirect_to(user_profile_path(@user), ...)
redirect_to(user_profile_path(@user, @profile), ...)
redirect_to([@user, @profile], ...)
redirect_to(@profile, ...)
Lo que es más, el uso de 'user_profile_path (@user)' a otra parte produce la URL correcta.
¿Alguna idea? Ah, y estoy usando Rails 3.0.0 y Ruby 1.9.2 si eso ayuda.
También estoy teniendo este problema.El enrutamiento debe ser lo suficientemente inteligente como para saber que se trata de @profile que es un singular y no poner el id en la url. Espero que haya una forma de evitar esto porque estoy tratando con urls polimórficas por necesidad ya que no sé cuál es la clase uno de los objetos principales (en su caso, no sabría que @user es necesariamente un Clase de usuario). –
Este es un largo stanting [error en los rieles] (https://github.com/rails/rails/issues/1769) –