2013-06-24 33 views
13

Rails是否提供了任何方式退出提前或从正在渲染的视图“返回”?有没有办法从Rails的视图中提前退出或“返回”?

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

<h1>Your records summary</h1> 

<% if @current_user.has_records? %> 
    <p>You don't have any records.</p> 
<% else %> 
    ... long block of view emission code here ... 
<% end %> 

在非ERB代码,我只是returnif状态,就不需要把那个长块内的else。它看起来像:

<h1>Your records summary</h1> 

<% if @current_user.has_records? %> 
    <p>You don't have any records.</p> 
    <% return (or something) %> 
<% end %> 
... long block of view emission code here ... 

有没有办法做这样的事情在erb?

编辑:要清楚,我不要求对替代方法,如已经提出。我不是Rails noob。我真的只想知道Ruby是否提供了我建议或不建议的机制。

+0

不是真的,但IMO可能会是错误的方法。考虑使用不同的模板和/或部分。 –

+0

“否”是完全可以接受的答案。然而,我不能“接受”评论。 –

+0

Stackoverflow评论/答案至少需要15个字符。所以一个简单的“不”是不可能的。 ;) – lurker

回答

4

IIRC没有提前退出模板的内置机制。这与我认为视图层应该如何表现的方式一致,尽管erb并不是一个模板引擎。

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

您也可以在lamba中嵌入eval,允许return工作。

尽管如此。

+2

使用try/catch的想法有点搞笑。 –

2

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

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

+0

谢谢,但我知道这一点。我没有要求替代方法。只是问我说的是否可能。 –

4

在Rails 3.2.2中,在模板中返回对我来说工作得很好。

<% return unless allowed_tags %> 
+0

我以前也使用过这种方法。任何人都可以给它一个缺点吗? –

+3

@Gerry,return语句之前的标记在执行返回时不会呈现。 – psparrow

+0

啊,谢谢@psparrow。如果我使用它,我只是在任何标记被渲染之前在视图的顶部完成,所以从未注意到这一点。 –

相关问题