2017-09-01 1 views
0

Ist mein Ansatz der Verwendung eines Link_to falsche Aktualisierung des Werts eines Attributs oder gibt es einfach etwas falsch mit meiner Syntax? Irgendwelche Ideen, wie ich das beheben kann?Parameter fehlt oder der Wert ist leer Fehler mit Patch link_to

Ich habe einen Fehler, wenn ich versuche, ein einzelnes Attribut mit link_to zu aktualisieren. Ich habe den folgenden Code in meinen Ansichten:

<%=link_to "Pay", event_attendee_path(event_attendee, :paid => true), :method => :patch%> 

ich die link_to in einer Schleife bin mit: <% @event_attendees.each do |event_attendee| %><%end%>

ich den Fehler: „param fehlt oder der Wert leer ist: event_attendee“ wenn ich versuche, um meinen Code auszuführen.

Ich habe folgend in meinem Controller:

def event_attendee_params 
    params.require(:event_attendee).permit(:attendee_id, :event_id, :paid) 
end 

Rake Routen:

event_attendee GET /event_attendees/:id(.:format)  event_attendees#show 
        PATCH /event_attendees/:id(.:format)  event_attendees#update 
        PUT /event_attendees/:id(.:format)  event_attendees#update 
        DELETE /event_attendees/:id(.:format)  event_attendees#destroy 

Antwort

1

Das Thema verwenden wollen, ist, dass, wenn übergeben Sie ein Modell auf einer Route als Sie haben getan, das einzige, was an den Server gesendet wird, ist die ID des Modells. Auf dem Server ist params [: id].

In Ihrem Controller müssen Params einen Schlüssel namens: event_atendee haben, aber das einzige, was Sie senden, ist die ID.

Auf einem Patch-Route benötigen Sie normalerweise die ID, um das Objekt zu erhalten, das Sie aktualisieren werden, so weit ist alles. Sie möchten wahrscheinlich auch andere Werte aktualisieren? Also würde ich mir die Dokumentation ansehen, wie man Formulardaten in einem link_to mit einer Patch-Methode sendet.

Ein Weg ist, die Schlüssel in die Route aufzunehmen, aber es könnte einen besseren Weg geben.

+0

Ich verstehe. Danke, das hat mir geholfen zu verstehen, wie ich mein Problem angehen kann. – Acrux

+0

@Acrux sollten Sie eine Antwort als beantwortet markieren, wenn sie Ihre Frage beantwortet! :-) – andy

0

es

params.require(:id).permit(:attendee_id, :event_id, :paid) 

Sie benötigen :event_attendee sein soll, aber Strecken analysieren es und legt es als :id

0

können Sie

@event_attendee.update(paid: params[:paid]) 

in Ihrem Controller verwenden oder

form_for(@event_attendee) 

auf Sicht verwenden, wenn Sie permit_params

Verwandte Themen