блок всегда возвращает истину - PullRequest
1 голос
/ 26 марта 2009

Всегда будет возвращать true и стирать весь массив

<% users.delete_if do |user| %>
  <% false %>
<% end %>

С другой стороны

<%
users.delete_if do |user|
  false
end
%>

работает и не удаляет массив.

Могу ли я каким-то образом использовать оператор delete_if в моем представлении и при этом иметь возможность вставлять html?

Спасибо

Ответы [ 3 ]

6 голосов
/ 26 марта 2009

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

Если вы затем используете вторую версию своего кода в одном из этих мест, эта проблема исчезнет.

2 голосов
/ 27 марта 2009

Игнорируя аспект побочного эффекта в виде, здесь , почему блок "возвращает" значение: существует сгенерированный оператор печати как часть кода, сгенерированного шаблоном ERB, между " %> "и" <% end ". Любое значение, оставленное этим сгенерированным кодом, будет использоваться в качестве окончательного оператора / выражения в блоке и, следовательно, его значения.

1 голос
/ 27 марта 2009

Я думаю, и я должен был бы проверить это, если вы используете «yield» в первой форме, он будет работать.

<% users.delete_if do |user| %>
  <% yield false %>
<% end %>

Но, как гласит первый автор, вам не следует менять данные в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...