2012-01-12 3 views
0

Je tente de mettre à jour les paramètres de mon profil à l'aide de cases à cocher dans une page de paramètres. Une fois que la case à cocher est cliquée, je veux rediriger vers la page des paramètres, j'ai donc ajouté une nouvelle action à mon contrôleur qui met à jour le profil mais redirige vers les paramètres. Cependant, je reçois l'erreur suivante:Form_for error - aucun itinéraire ne correspond à la publication

`No route matches {:action=>"edit_settings", :controller=>"profiles"}` 

Voici mon form_for code:

<%= form_tag({:action => "edit_settings", :controller => "profiles"}, :html => {:multipart => true }) do |f| %> 

Mon action edit_settings dans mon contrôleur profiles:

def edit_settings 
    @profile = user.profile 
    if @profile.update_attributes(params[:profile]) 
    redirect_to settings_path, :notice => 'Updated user information successfully.' 
    else 
    render :edit 
    end 
end 

Dans mon fichier routes.rb:

resources :profiles do 
    post :edit_settings 
end 

intérieur rake routes:

profile_edit_settings POST /profiles/:profile_id/edit_settings(.:format)  {:action=>"edit_settings", :controller=>"profiles"} 

Répondre

2

Vous créez une action de membre: edit_settings et actions membres en vertu des ressources besoin d'un identifiant. Si vous vérifiez la sortie "rake routes", vous verrez que cela vous donne "/ profiles /: profile_id/edit_settings", et il manque le paramètre profile_id.

Vous pouvez corriger cela en modifiant vos paramètres de formulaire à {:action => "edit_settings", :controller => "profiles", :profile_id => @profile.id}. Dans tous les cas, si cette fonction de contrôleur doit mettre à jour le profil utilisateur actuel, et seulement (en supposant que ce contrôleur ne permettra pas de mettre à jour d'autres profils d'utilisateurs), une ressource singulière serait probablement une meilleure solution (http://guides.rubyonrails.org/routing.html#singular-resources) . De cette façon, vous n'aurez pas besoin de passer le paramètre :profile_id.

+0

Bonne explication, merci! Ajout de 'match 'profiles/edit_settings",: to => "profils # edit_settings' à mon fichier de routes travaillé. – tvalent2

Questions connexes