有没有办法从Rails中的视图提前退出或“返回”?

Rails是否提供任何方式提前退出或从正在呈现的视图“返回”?

例如,我有一个结构如下:

Your records summary

You don't have any records.

... long block of view emission code here ...

在非erb代码中,我只是从if条件return ,并且不需要将那个长块放在else 。 它看起来像:

 

Your records summary

You don't have any records.

... long block of view emission code here ...

有没有办法在erb中做类似的事情?

编辑:要明确, 我不是要求其他方法 ,例如已被建议。 我不是Rails noob。 我真的只想知道Ruby是否提供了我建议与否的机制。

IIRC没有提前退出模板的内置机制。 这与(我认为)视图层的行为方式一致,尽管erb不是一个模板引擎。

旧的解决方案是将模板包装在一个catch并从模板中抛出一些东西,如符号。

您还可以将eval嵌入lamba中,以便return工作。

不过还是如此。

在Rails 3.2.2中,返回模板内部对我来说效果很好。

 <% return unless allowed_tags %> 

最好的方法是在渲染模板之前处理控制器中的条件。 在那里,您可以提前return不同的模板(如“添加记录”表单)或结果模板。

您还可以在视图中将该逻辑卸载到Javascript。

这是一个古老的问题,但我想我会花时间让未来的人们过一个小时左右的生活,试图弄清楚这是否可行。

我发现,早在Rails 3.2中,这实际上是可行的。

它需要一些ActionView内部知识,我主张任何人在生产代码中这样做。 此外,这个特定的实现仅适用于Rails使用的内置ERB引擎,它本身使用Erubi。

好了,既然我们完成了警告,那就行动了!

非常简单的答案是return @output_buffer.to_s

只要您返回之前关闭了所有HTML标记,它似乎就能正常工作并且所有内容都正确呈现。

好奇的是,此输出缓冲区当前在Erubi ERB处理程序的初始化程序中配置 。 其余的工作由底层的Erubi :: Engine实现完成 。

我已经开辟了一些提供早期返回的不那么脆弱的方法,但到目前为止我都没有成功。