2012-09-10 13 views
19

Ich habe eine erholsame (Gerüst generiert) Controller und Modell für Abstimmungen, ich versuche einfach, ein Feld in der Ansicht hinzufügen, dass bei einem Klick, wird eine neue Abstimmung für ein bestimmtes Auto erstellen. Es muss eine POST sein. Wie soll ich das in Schienen machen?Rails link_to oder button_Posten Anfrage mit Parametern

<% @cars.each do |car| %> 
    <tr> 
    <td><%= button_to '+', {:controller => "votes", :action => "create"}, :car_id => car.id, :user_id=> session[:user_id] , :method=>:post %></td> 
    <td><%= car.votes.count %></td> 
    <td><%= car.name %></td> 
    <td><%= car.code %></td> 
    <td><%= car.album %></td> 
<% end %> 

Antwort

25
<td><%= button_to '+', {:controller => "votes", :action => "create", :car_id => car.id, :user_id=> session[:user_id]} , :method=>:post %></td> 

Dies wird params machen [: car_id] und params [: user_id] in VotesController verfügbar Aktion erstellen.

1
<td><%= button_to '+', {:controller => "votes", :action => "create", :car_id => car.id, :user_id=> session[:user_id]} , {:method=>:post} %></td> 

Erez ist richtig - der erste Hash in diesem Fall ist der „URL-Parameter“ hash, die die URL steuert, wo der Knopf seine Anforderung sendet. Der zweite Hash ist der "HTML-Parameter" -Hash, der das Aussehen des Buttons steuert, sowie die Methode submit (durch Hinzufügen eines versteckten Feldes im generierten HTML).

Die verwirrende Sache hier ist, dass die URL-Parameter Sie bitten, den Controller und die Aktion in einer Controller-zentrierten Weise anzugeben, aber dann müssen Sie die IDs für die URL übergeben, die URL-zentriert ist. Diese Kombination hat mich für eine lange Zeit abgewiesen. Sie können übrigens alle zusätzlichen Parameter hinzufügen, die Sie im URL-Parameter-Hash mögen - um als Argumente für andere Methoden in Ihrem Controller zu verwenden, um erweiterte Aktionen auszuführen.

16

Rails 5 + haml, zum Beispiel:

= button_to "smth", some_path, method: :get, params: { start_point: 3.month.ago } 

der Schlüssel ist params Schlüssel, dann in der Steuerung zu verwenden, können Sie Wert erhalten über @some_var = params [: start_point]