обновить базу данных с помощью флажков — rails

#ruby-on-rails #checkbox

#ruby-on-rails #флажок

Вопрос:

Итак, у меня есть модель пользователей, которая связана с действиями, а действия связаны с завершенной моделью ?.

То, что я пытаюсь сделать, это обновить, если действие завершено при нажатии флажка.

Вот мое мнение:

   <% @user.completeds.each do |task| %>
    <tr>
      <td><%= task.activity.name %></td>
      <td><%= task.activity.type.name %></td>
      <td><%= task.activity.points %></td>

      <td><%= check_box_tag 'finished', '1', task.finished %></td>
    </tr>
<% end %>
  

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

Спасибо за любую помощь.

Редактировать:

Чтобы прояснить мой вопрос, мой приведенный выше код работает для правильного отображения данных, чего я не могу понять, так это как превратить его в форму, чтобы я мог сохранить любые изменения в значениях флажка.

Ответ №1:

Самым простым решением было бы использовать форму и кнопку сохранения. Если вы посмотрите на руководство по рельсам Form Helpers, вы можете увидеть пример:

 <%= check_box_tag(:pet_dog) %>
<%= label_tag(:pet_dog, "I own a dog") %>
  

Вы, вероятно, хотите использовать form_for, а не form_tag, хотя для обновления вашего объекта. Смотрите Документацию здесь.

 <%= form_for task do |f| %>
  <%= f.label :finished %>:
  <%= f.check_box :finished %><br />
  <%= f.submit %>
<% end %>
  

Редактировать:
Чтобы обновить кратные, попробуйте что-то вроде этого:

 <% form_tag edit_multiple_products_path do %>
<table>
  <tbody>
    <% @user.completeds.each do |task| %>
      <tr>
        <td><%= task.activity.name %></td>
        <td><%= task.activity.type.name %></td>
        <td><%= task.activity.points %></td>
        <td><%= check_box_tag 'finished', '1', task.finished %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<%= submit_tag "Update Tasks" %>
<% end %>
  

Кроме того, не забудьте сделать все остальное, что упоминается в RailsCast.

Комментарии:

1. Любой способ сделать это с помощью одной кнопки сохранения / отправки?

2. Да! Посмотрите этот пример RailsCast: railscasts.com/episodes/165-edit-multiple

3. В принципе, вам все еще нужна форма, как в моем примере, но вам нужен уникальный путь для обновления кратных.

4. Хорошо, я думаю, это приближает меня, но, думаю, я был не очень ясен. Я просто пытаюсь обновить значение «готово» в базе данных до 1 или 0 в зависимости от того, что проверено. Я не пытаюсь обновить все остальные столбцы.

5. Опубликованный мной пример кода обновит только один столбец.