Удалить запись из таблицы, не удаляя его из базы данных

Обновить

December 2018

Просмотры

614 раз

1

Я построил небольшой веб-приложение, в котором основной вид показывает таблицу и администратор имеет возможность удалить строку, удалив его из базы данных с помощью:

*.destroy

Однако я хочу, чтобы все записи в базе данных, но все же хотел бы возможность для пользователя, чтобы иметь возможность удалить строки из таблицы и не знаете, как идти об этом. Я думал об использовании двух различных таблиц базы данных, но хотел, чтобы проверить, есть ли может быть более простой способ?

Вот мой основной вид:

<h1>Student List</h1>

<table class ="Tables">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Date Submit</th>
<th>Floor Preference</th>
<th></th>
</tr>

<% @students.each do |student|%>
<tr>
<td><%= student.f_name %></td>
<td><%= student.l_name %></td>
<td><%= student.created_at %></td>
<td><%= student.floor_pref %></td>
<td><%= button_to 'Remove', student, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New Student', new_student_path %>

3 ответы

0

Это решение является немного более трудоемким, но работает для меня. Мои шаги похожи, но я предоставлю более подробно, потому что я новичок в программировании, так что я буду считать, что есть другие, которые являются новыми, а также:

Предположения: - Вы работаете с одной модели, представления и контроллера (например, модель является Foo) - Вы можете удалить запись из БД, нажав на кнопку, которая инициирует действие контроллера ( «уничтожить») - Если у вас есть ассоциации, разрушая запись из БД является проблематичным для вашего приложения.

  1. Создана миграция для нового столбца с именем is_active, ж / типа данных: Boolean. Убедитесь в том, что рельсы создали миграции правильно. Если нет, то вручную настроить файл миграции. Убедитесь, что вы связывайте EXEC грабли БД: мигрировать после любого изменения в БД. Перезагрузите сервер.

  2. Редактировать действие уничтожить в контроллере, установив is_active переменной лжи. Boolean имеет значение «истина» или «ложь». Для нас «ложь» будет представлять собой «удален» строки (хотя он не будет удален в базе данных, просто скрыты от просмотра. Например @ foo.is_active = ложь. Обязательно используйте оператор «=», который сопоставляет значение. В представлении вы будете использовать другой оператор (==). Убедитесь, что вы делаете после сохранения какого-либо редактирования. например @ foo.save. Кроме того, закомментируйте те уничтожить код. например, # @ foo.destroy

    2а. Я также установить is_active значение «истина» в моем создании действия. Это не может быть необходимым, но это работает для меня до сих пор. Если вы сделали эту настройку, не забудьте сохранить. например @ foo.is_active = верно, @ foo.save

  3. По мнению где ваши результаты будут показывать, добавить условный оператор. Я пробегаем по моему столу и живописи результатов. Мой, если заявление после моего цикла делать. Если он имеет значение «ложь» Я покажу строку текста. ELSE, если он имеет значение «истина» Я покажу мои данные. (Как правило, в последующих строках у меня есть: Do Loop, 'False', если заявление, Else, 'True' Data, Конечный тег).

Так, в «если» заявлении я говорю рельсы, что, когда вы через циклические, если вы видите строку, в которой foo.is_active является «ложным», показать этот текст. В противном случае (еще) показывают данные между «еще» и «концом». Обратите внимание на то, как оператор в представлении отличается от контроллера. По мнению мы проверка равенства (==), не назначив значение (=).

Убедитесь, что переменные, которые вы вызываете матч, что вы установили в действии уничтожить ваш контроллер. Они должны быть последовательными, или вы получите сообщение об ошибке. Это дало мне проблемы в течение нескольких часов, прежде чем я понял это. Так что если вы устанавливаете @foo в контроллере, то вы можете вызывать только @foo с вашей точки зрения.

И, наконец, вид я работаю мой индекс, но я также, но условный оператор в моем шоу зрения, чтобы мои пользователи могут переключаться is_admin включения или выключения. Используя simple_form_for форму, я добавил is_admin переменную как логическое значение, которое показывает, как флажок на моем шоу форме. Когда проверяется is_admin является «истина» и строка покажет. Если флажок is_admin является «ложью» и, следовательно, скрыто.

2
rails g migration AddActiveToStudents active:boolean

Тогда в силу вы можете изменить значение при нажатии на кнопку «Удалить»

Затем положить чек после .each do |student|

<% if student.active %>
..........display..............
<% end %>
6

вы можете легко сделать это, создавая дополнительный столбец в том же таблице с логическим значением. Поэтому дополнительное имя столбца может быть IsActive. IsActive Удалены Роу будет 0 и остальные имеют 1. Когда выборки данных просто поставить дополнительную проверку, где IsActive = 1