28

Ich versuche, etwas Javascript in meiner Rails App arbeiten zu lassen.Zu wenige Argumente

Ich möchte, dass meine Indexseite mir erlaubt, einzelne Elemente auf der Indexseite zu bearbeiten und dann die Indexseite beim Bearbeiten neu zu laden.

Meine index.html.erb Seite wie folgt aussieht:

<div id="index"> 
<%= render 'index' %> 
</div> 

In meinem index.js.erb ich habe:

$('#index').html("<%=j render 'index' %>"); 

und in meinem holders_controller:

def edit 
    holder = Holder.find(params[:id]) 
end 

def update 
    @holder = Holder.find(params[:id]) 
    if @holder.update_attributes(params[:holder]) 
    format.html { redirect_to holders_path } #, flash[:success] = "holder updated") 
    ## ^---Line 28 in error 
    format.js 
    else 
    render 'edit' 
    end 
end 

Wenn ich die Indexseite lade, ist es in Ordnung. Sobald die Schaltfläche Bearbeiten klicken und das Formular abschickt, erhalte ich folgendes:

enter image description here

Aber wenn ich zurück und aktualisieren Sie die Index-Seite gehen, werden die Änderungen gespeichert. Was mache ich falsch?

Antwort

89

Sie haben vergessen responds_to Block zu schreiben:

def update 
    @holder = Holder.find(params[:id]) 
    if @holder.update_attributes(params[:holder]) 
    respond_to do |format| 
     format.html { redirect_to holders_path } #, flash[:success] = "holder updated") 
     format.js 
    end 
    else 
    render 'edit' 
    end 
end 

Aber ich bin misstrauisch über Ihre index.html.erb, ich glaube nicht, dass wirklich so, wie Sie denken, funktionieren wird.

+4

'antwortet_zu tun' – clyfe

+0

Richtig, danke. :) – Matzi

+0

@Matzi Ich musste 'antworten_zu tun | Format |' verwenden, um es zum Laufen zu bringen. –