2010-04-15 82 views
3

說我的用戶模型,並有一堆的用戶信息,如電子郵件,出生日期,地點,電話號碼等只顯示一個模型,視圖Rails的非空白屬性

什麼是最簡單的方法隱藏空白的屬性?

我做這樣的事情

<% if blog.title.empty? -%> 
<p>Body: <%=h blog.body %></p> 
<p>Comments: <%=h blog.comments %></p> 

<% elsif blog.body.empty? %> 
<p>Title: <%=h blog.title %></p> 
<p>Comments: <%=h blog.comments %></p> 

<% else -%> 
<p>Title: <%=h blog.title %></p> 
<p>Body: <%=h blog.body %></p> 
<% end -%> 

顯然,這是一個醜陋的孩子。除了使用部分渲染,是否有一個技巧只顯示非空白字段?

我一直在試圖編寫一個幫助方法來使視圖更清潔,但這更醜陋。

任何幫助表示讚賞。

+0

使用if-else條件,你不能做到這一點。因爲如果你的IF條件變爲真,不管其他ELSIF條件如何,它都不會被執行。例如: 例如: - 標題和正文都不爲空仍然只能看到標題。 – Salil 2010-04-15 11:18:18

+0

其實它適合我。如果有一件事匹配,我不希望其他人被執行,或者我會有每個條目的三個實例。整個事情是在@博客中的博客,所以每一個例子,當一步一步地,如果任何返回true,停止。 – 2010-04-15 11:29:02

回答

3

我會做這樣的:

# blog_helper.rb 
show_non_blank_field(label, value) 
    "<p>#{label}: #{h value}</p>" if !value.blank? 
end 

,然後在視圖:

<%= show_non_blank_field "Body", blog.body %> 

等等...

當然你也可以使用更短的助手名。

如果你想做到這一點在if-else方式,試試這個:

<% if !blog.title.blank? -%> 
<p>Title: <%=h blog.title %></p> 
<% end %> 

<% if !blog.body.blank? %> 
<p>Body: <%=h blog.body %></p> 
<% end %> 

<p>Comments: <%=h blog.comments %></p> 
+0

完美的作品。謝謝! – 2010-04-15 11:24:59

+0

作爲該主題的一個細微變化,您可以使用「content_tag」(幫助程序或視圖中)來刪除嵌入的HTML,如下所示: content_tag(:p,「%s:%s」 %[label,value])除非value.blank? – NeilS 2010-04-15 11:45:37

+0

我不知道content_tag可以這樣使用。謝謝。怎麼樣的SQL注入。我假設使用%s而不是標籤或值來處理這個問題。 – 2010-04-16 05:47:12

0
show_field_unless_empty(blog, :body, 'Body') 

然後,在blog_helper.rb

def show_field_unless_empty(model, field, title) 
    render :partial => 'field', :locals => {:value => model.send(field), :title => title} if model.send(field) 
end 

然後,在_field.html.erb

<p> 
<%= title %>: 
<%= value %> 
</p> 

這似乎相當乾淨的給我。

+0

對不起,這並不奏效。它給了我和以前一樣的價值。 – 2010-04-15 11:19:26

相關問題