Übergeben Sie den Parameter von link_to ruby ​​auf Schienen

70

Ich habe diese Codezeile:

<%= link_to "Add to cart", :controller => "car", :action => "add_to_cart", :car => car %>

Wenn ich in der Methode add_to_cart bin ... wie kann ich das Auto bitte aufrufen?

@car = Car.new(params[:car])

Das funktioniert nicht, weil es besagt, dass ich versuche, es zu stringifizieren.

Ich verstehe nicht, was los ist; weil ich dies verwendet habe, um neue Benutzer zu erstellen, und es hat gut funktioniert.

Auto ist übrigens mein Autoobjekt.

Lilz
quelle

Antworten:

141

Versuchen:

<%= link_to "Add to cart", {:controller => "car", :action => "add_to_cart", :car => car.id }%>

und dann in Ihrem Controller

@car = Car.find(params[:car])

welches, finden Sie in Ihrer 'Autos'-Tabelle (wie bei der Schienenpluralisierung) in Ihrer DB ein Auto mit der ID == to car.id.

ich hoffe es hilft! fröhliche Codierung

mehr als ein Jahr später, aber wenn Sie es sehen oder jemand tut, könnte ich die Punkte verwenden; D.

juanm55
quelle
1
Was aber, wenn der Parameter beispielsweise vom Wert einer Eingabe abhängt, die dynamischer Natur sein kann?
Sebastialonso
80

Das obige hat bei mir nicht funktioniert, aber das hat funktioniert

<%= link_to "text_to_show_in_url", action_controller_path(:gender => "male", :param2=> "something_else") %>

Jonathan Leung
quelle
6

Vielleicht versuchen Sie Folgendes:

<%= link_to "Add to cart", 
            :controller => "car", 
            :action => "add_to_cart", 
            :car => car.attributes %>

Aber ich würde wirklich gerne sehen, wo das Autoobjekt für diese Seite eingerichtet wird (dh den Rest der Ansicht).

MattMcKnight
quelle
2

Sie möchten das carObjekt wahrscheinlich nicht als Parameter übergeben, sondern nur übergeben car.id. Was bekommen Sie, wenn Sie inspect(params)auf "In den Warenkorb" klicken?

Bensie
quelle
Das Problem dabei ist, dass ich diese Autos nirgendwo gespeichert habe, da ich die Informationen aus dem Internet kratze und sie nirgendwo speichere. Daher ist die ID noch nicht vorhanden und ansonsten wäre sie nutzlos: /
Lilz
Was bekommen Sie noch einmal, wenn Sie inspizieren (params)?
Bensie
1
params [: product] .inspect kam leer zurück ""
Lilz
Wenn Sie keine 'ID' haben, was erwarten Sie als Parameter?
Dmytrii Nagirniak