block总是返回true

时间:2009-03-26 16:42:33

标签: ruby-on-rails

将始终返回true并擦除整个数组

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

另一方面

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

有效并且不会删除数组。

我可以以某种方式在我的视图中使用delete_if语句,仍然可以插入html吗?

由于

3 个答案:

答案 0 :(得分:6)

您不应该在视图中修改数据 - 而是在控制器或模型中执行此操作。仅使用视图来反映数据库的当前状态,而不是更改它。

如果您在其中任何一个地方使用代码的第二个版本,则此问题将消失。

答案 1 :(得分:2)

忽略视图中的副作用方面,这里是为什么块“返回”一个值:生成的print语句作为ERB模板生成代码之间的一部分“%>”和“<% end”。此生成的代码留下的任何值都将用作块中的最终语句/表达式,从而用作其值。

答案 2 :(得分:1)

我想,如果你在第一种形式中使用“yield”,我将不得不测试它,它会起作用。

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

但是,正如第一张海报所说,你不应该从视图中更改数据。