有没有办法从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实现完成 。
我已经开辟了一些提供早期返回的不那么脆弱的方法,但到目前为止我都没有成功。