2013-06-24 61 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。如果我使用它,我只是在任何標記被渲染之前在視圖的頂部完成,所以從未注意到這一點。 –

相關問題