Всегда будет возвращать true и стирать весь массив
<% users.delete_if do |user| %> <% false %> <% end %>
С другой стороны
<% users.delete_if do |user| false end %>
работает и не удаляет массив.
Могу ли я каким-то образом использовать оператор delete_if в моем представлении и при этом иметь возможность вставлять html?
Спасибо
Вы не должны вообще изменять данные в своих представлениях - вместо этого делайте это в своем контроллере или модели. Используйте представления только для отражения текущего состояния вашей базы данных, а не для его изменения.
Если вы затем используете вторую версию своего кода в одном из этих мест, эта проблема исчезнет.
Игнорируя аспект побочного эффекта в виде, здесь , почему блок "возвращает" значение: существует сгенерированный оператор печати как часть кода, сгенерированного шаблоном ERB, между " %> "и" <% end ". Любое значение, оставленное этим сгенерированным кодом, будет использоваться в качестве окончательного оператора / выражения в блоке и, следовательно, его значения.
%>
<% end
Я думаю, и я должен был бы проверить это, если вы используете «yield» в первой форме, он будет работать.
<% users.delete_if do |user| %> <% yield false %> <% end %>
Но, как гласит первый автор, вам не следует менять данные в представлении.