Подтвердить что ты не робот

Rails link_to или button_to для отправки запроса с параметрами

У меня есть резервный контроллер и модель для голосования, я просто пытаюсь добавить поле в представление, которое при нажатии будет создавать новое голосование за данный автомобиль. Это должен быть POST, как я должен это делать в рельсах?

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

Ответ 1

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

Это заставит params [: car_id] и params [: user_id], доступные в VotesController, создать действие.

Ответ 2

Rails 5 + haml, например:

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

ключ состоит в использовании ключа params, затем в контроллере вы сможете получить значение через @some_var = params [: start_point]

Ответ 3

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

Erez прав - первый хэш в этом случае - это хеш URL-адресов, который управляет URL-адресом, по которому кнопка отправляет свой запрос. Второй хэш - это хеш "HTML-параметров", который контролирует внешний вид кнопки, а также метод отправки (путем добавления скрытого поля в сгенерированный HTML).

Заблуждение здесь заключается в том, что параметры URL-адреса требуют указать контроллер и действие с помощью контроллера, но затем вам нужно пройти по идентификатору URL-адреса, который больше ориентирован на URL-адрес. Эта комбинация отбросила меня надолго. Вы можете добавить любые дополнительные параметры, которые вам нравятся в хеш-параметрах URL-адресов, кстати - использовать в качестве аргументов для других методов в вашем контроллере, чтобы выполнить более сложные действия.