2013-02-10 64 views
0

我有一個負責HTML/CSS樣式的主頁,但其中一些內容來自partials。部分接收一些當地人或參數,即current_user或person,並顯示信息(如果有的話)。檢查Rails部分是否爲空

有沒有辦法讓我檢查部分是否呈現任何東西?我的最終目標是這樣的:

<% if my_partial can render something %> 
<div class="css_for_something"> 
    <%= render(partial: 'my_partial', locals: {...}) %> 
<% else %> 
    <div class="css_for_no_info"> 
    <%= render something else %> 
<% end %> 

我不希望諧音來處理造型邏輯;他們只需要顯示內容(如果有的話)。相反,主頁面不應該知道關於部分邏輯的任何內容,例如檢查值或查詢數據庫。

謝謝

回答

1

嘗試存儲在一個變量被render_to_string產生的價值:

<% partial_content = render_to_string(partial: 'my_partial', locals: {...}).strip %> 

然後你可以看它是否包含任何內容:

<% if partial_content.present? %> 
    <%= partial_content %> 
<% else %> 
    <div class="css_for_no_info"> 
    <%= render something else %> 
    </div> 
<% end %> 
+2

不是'render_to_string'? – 2013-02-10 20:27:30

+0

@RyanBigg那會好很多。編輯。謝謝! – 2013-02-11 00:26:58

0

不幸的是,克里斯·彼得的解決方案在導軌4.2.4上不起作用,因爲render_to_string似乎無法在視圖中使用。

但是,下面的工作(軌4.2.4):

<% partial_content = render partial: 'my_partial' %> 
<% if partial_content.present? %> 
    <%= partial_content %> 
<% else %> 
    <%# rendered if partial is empty %> 
<% end %> 

請注意,present?檢查確實只檢查是否被渲染什麼是空的。如果,例如一個HTML註釋,返回,檢查返回false。