Ruby on Rails: Увеличьте значение объекта в эшафот с помощью button_to
У меня есть эшафот, который создает таблицу баскетбольных команд. Я хочу реализовать кнопку в таблице, которая увеличивает количество выигрышей для команды и еще одну для потерь. По умолчанию в контроллере обе установлены на 0. Должен ли я реализовать метод в контроллере или в представлении (add_wins и add_losses)? Если так, как это будет выглядеть? Благодарю вас. Это код для тела таблицы в представлении:
<tbody>
<% @teams.each do |team| %>
<tr>
<td><%= team.Name %></td>
<td><%= team.Color %></td>
<td><%= team.Players %></td>
<td><%= team.Wins %></td>
<td style="font-size: 20px"><%= button_to '+', method: :add_wins %></td> <!-- The method add_wins doesn't exist. -->
<td><%= team.Losses %></td>
<td style="font-size: 20px"><%= button_to '+',method: :add_losses %></td> <!-- The method add_losses doesn't exist. -->
<td><%= link_to 'Show', team %></td>
<td><%= link_to 'Edit', edit_team_path(team) %></td>
<td><%= link_to 'Delete', team, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
1 ответ
Не полностью скопированный ответ, но я постараюсь объяснить основы, так что, надеюсь, вы сами сможете найти решение полностью.
Прежде всего, я бы посоветовал вам не внедрять отдельные add_wins
, add_losses
методы как эти:
- Слишком много загромождать ваш контроллер
- Не справляйтесь с проблемами подключения / перезагрузки (подумайте, если у вас есть
0
потери, нажмитеadd
, что-то не так с отображением ответа, счетчик обновлен до1
, но пользователь возвращается на предыдущую страницу, видит0
снова и щелкаетadd
опять же, вы бы в конечном итоге2
вместо1
,
Вместо этого придерживайтесь стандарта update
действие с правильными параметрами.
Вот документы для button_to
, вам придется установить правильное method
а также params
, Ваш params
необходимо содержать следующее значение для потерь или побед и идентификатор команды. Кроме того, вы можете подтвердить, что кто-то не пытается отправить какое-то произвольное значение для выигрыша или проигрыша. method
вы хотите использовать это put
,