2016-03-19 8 views
0

Ich verwende Rails 4.2.3. Ich habe dies in meiner Controller-Datei „./app/controllers/users_controller.rb“ ...Fehlermeldung "Keine Route stimmt überein" obwohl ich eine Methode in meinem Controller habe

def edit 
    @user = User.find(session["user_id"]) 
    render 'edit' 
    end 

    def update 
    @user = User.find(session["user_id"]) 
    if @user.update_attributes(user_params) 
     flash[:success] = "Profile updated" 
    end 
    render 'edit' 
    end 

Und ich habe dies in meiner „./app/views/users/edit.html.erb“ Datei

<%= form_for(@user) do |f| %> 
    … 
     <%= button_to "Save", { :action => "update" }, :method => :post, :class => 'button' %> 

Aber wenn ich meine url „http://localhost:3000/users/edit“ besuchen, bekomme ich diesen Fehler

No route matches {:action=>"update", :controller=>"users"} 

Dies ist, was ich in Routen/config.rb haben so bin ich nicht sicher, warum seine auseinander ... fallen

get "users/edit" => "users#edit" 
    resources :users 

Antwort

0

Ich glaube, Sie brauchen, um PUT/PATCH-Methode für die Update-Aktion zu verwenden, während POST für die Aktion verwendet wird, erstellen, wie die Rails documentation:

<%= button_to "Save", { :controller => "users", :id => @user.id }, :method => :put, :class => 'button' %> 

Auch ist rake routes ein wirklich nützlicher Befehl zum Debuggen von Routingproblemen, die alle definierten Routen ablegen.

+0

Ich habe meinen Button-Code geändert in "<% = button_to" Speichern ", {: action =>" update "},: methode =>: put,: class => 'button'%>" aber wenn ich http besuche : // localhost: 3000/users/edit, bekomme ich immer noch den gleichen Fehler. – Dave

+0

@Dave Aktualisierte Antwort - versuchen Sie, '{: controller =>" Benutzer ",: id => @ user.id}' zu übergeben. Kann leider nicht testen, aber das sollte funktionieren. –

+0

Auch Ihr Code erneut angeschaut - Sie könnten stattdessen 'fmit' verwenden, d. H.' <% = Form_for (@user,: method =>: put) do | f | %> 'und dann' fmit' anstelle von 'button_to'. –

Verwandte Themen