2016-04-30 8 views
0

Ich bekomme gerade dies in meine Checkboxen Daten-URL "/ Todos? ID = F483e4a8cb1a728f" wenn es nur "/ Todos/F483e4a8cb1a728f" Ich bin mit freundlicher ID für die Random Schnecken.freundliche ID Pfad in checkbox_tag Schienen 4

Derzeit nenne ich es als Daten: {remote: true, url: url_for (Controller:: todos, id: todo), Methode: "PATCH"} ID: todo und ich habe todo.id aber das versucht gibt mir die Nummer der Post, die ich nicht will - ich will die Schnecke.

Weiß jemand, wie ich das umgehen könnte?

Vielen Dank liebe Herren.

EDIT: Mehr Kontext wie gewünscht

<%= check_box_tag 'todo[completed]', todo.id, todo.completed, data: { remote: true, url: url_for(controller: :todos, id: todo), method: "PATCH" }, id: todo.id %> 
<%= label_tag todo.id, "COMPLETE", :class => 'strikethrough' %> 

Dies ist, wie ich es bin ruft - wie ich auf dem Index meine todo abschließen möchten und nicht in zu gehen und die Aktualisierung auf todos /: id/bearbeiten. Allerdings gibt es mir einen Fehler, wenn ich das Kontrollkästchen klicken, da die URL wie diese ist „/ todos id = f483e4a8cb1a728f?“, Wenn es nur „/ todos/f483e4a8cb1a728f“

EDIT sein sollte:

Meine Aktion

def completed 
    if @todo.update_attributes(:completed => params[:completed]) 
     flash[:success] = "Wowzers." 
     redirect_to dashboard_path 
    else 
     flash.now[:error] = "Not so wowzers..." 
     render :new 
    end 
    end 

Meine Routen

resources :todos do 
    member do 
     # post 'completed' 
     patch 'todos/:id' => 'todos#completed' 
    end 
    end 
+0

Aufruf was und wie? Kannst du ein bisschen mehr Kontext einbeziehen? – max

+0

Aktualisiert, hoffe, dies bietet mehr Einblick? –

Antwort

1

Zunächst einmal müssen Sie eine Route als patch '/todos/:id' konfiguriert.

Wenn Sie bereits haben, setzen Sie den Namen der Aktion in den url_for Parameter, wie zB:

url_for(controller: :todos, action: :something, id: todo.id)

Wenn Sie diese Aktion nicht haben, können Sie es schaffen müssen.

Die url_for kehrt /todos?id=f483e4a8cb1a728f, weil es die index Aktion als Standard erwägt, und wie dieser Weg innerhalb des Pfades keine :id Parameter haben, die Helfer setzen es als Parameter (Query-String).

+0

Ich habe eine Aktion bereits eingerichtet, aber das Hinzufügen von Patch '/ todos /: id' hat mir einen Fehler 'Fehlende: Controller-Schlüssel auf Routen Definition, bitte überprüfen Sie Ihre Routen.' Ich habe es noch nie zuvor gesehen, könntest du bitte klarstellen? –

+0

Wie haben Sie es definiert? Ich denke, die einfachste Syntax ist 'patchen 'todos /: id' => 'todos # your_action''. –

+0

Ohh Entschuldigung, mein Schlechter. Das einzige Problem ist jetzt, zeigt es die ID zweimal '/ todos/e3309e65a5f225ec696807ee1f5be3/todos/e3309e65a5f225ec696807ee1f5be3' oder 'Todos/19/Todos/19', wenn ich id: todo.id als Gegensatz zu nur todo –