Ho un semplice modello User con una risorsa Profilo nidificato singolare quindi nel mio routes.rb ho:Rails nidificati Singolare risorse Routing
resources :users do
resource :profile, :only => [:edit, :update, :show]
end
Questo genera i percorsi previsti:
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 'Ho creato un metodo di aggiornamento semplice controller che aggiorna il modello e poi reindirizza su aggiornamento riuscito:
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
Il problema è che una volta inviato il modulo, il modulo reindirizza a mydomain.com/users/4/profile.22 dove 22 risulta essere l'id del profilo. Chiaramente questo confonde i controller poiché il routing interpreta il '22' come formato.
La mia domanda è, come faccio a reindirizzare a mydomain.com/users/4/profile? ho provato le seguenti variazioni sul conto redirect_to a nessun effetto, tutti risultato nella stessa URL non corretto:
redirect_to(user_profile_path(@user), ...)
redirect_to(user_profile_path(@user, @profile), ...)
redirect_to([@user, @profile], ...)
redirect_to(@profile, ...)
Cosa c'è di più, usando 'user_profile_path (@user)' produce altrove l'URL corretto.
Qualche idea? Oh, e sto usando Rails 3.0.0 e Ruby 1.9.2 se questo aiuta.
Anche io sto avendo questo problema.Il routing dovrebbe essere abbastanza intelligente da sapere che si tratta di @profile che è singolare e non inserire l'id nell'URL. Spero che ci sia un modo per ovviare a questo perché ho a che fare con url polimorfi per necessità perché non so quale classe uno degli oggetti padre sia (nel tuo caso non saprei che @user è necessariamente un Classe utente). –
Questo è un lungo stanting [bug in rails] (https://github.com/rails/rails/issues/1769) –