2012-09-10 13 views
19

Tengo un controlador y un modelo de Votes para el voto tranquilo (generado por andamios), simplemente estoy tratando de agregar un campo a la vista que, al hacer clic, creará un nuevo voto para un auto determinado. Tiene que ser un POST. ¿De qué manera debería estar haciendo esto en los rieles?Rails link_to o button_to post request con los parámetros

<% @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 %> 

Respuesta

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

Esto hará que params [: car_id] y [params: user_id] disponible en VotesController Crear acción.

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

Erez es correcto - la primera almohadilla en este caso es el hash "parámetros de URL", que controla la dirección URL en el botón envía su petición. El segundo hash es el hash de "parámetros HTML", que controla la apariencia del botón, así como el método de envío (al agregar un campo oculto en el HTML generado).

Lo confuso aquí es que los parámetros de URL le piden que especifique el controlador y la acción de una manera centrada en el controlador, pero luego requiere que pase los ID para la URL, que está más centrada en la URL. Esa combinación me echó por un largo tiempo. Por cierto, puede agregar cualquier parámetro adicional que desee en el hash de parámetros de URL, para usar como argumentos para otros métodos en su controlador, para tomar medidas más avanzadas.

16

carriles 5 + HAML, por ejemplo:

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

la clave es usar params clave, a continuación en el controlador va a ser capaz de obtener valor a través de @some_var = params [: punto_de_inicio]

Cuestiones relacionadas