2013-05-10 90 views
0

不顯示幾個html塊如果數據不可用,我試圖限制顯示的信息。如果條件不符合ruby

在我view.rb文件,我有這樣的事情

<% if @content != nil %> 
<div> 
    <h3>....</h3> 
    <% @content[0..3].each do |something| %> 
    <li> .... <li> 
    <% end %> 
    <% @content[4..5].each do |something| %> 
    <li> .... <li> 
    <% end %> 
    <% @content[5..11].each do |something| %> 
    <li> .... <li> 
    <% end %> 
<div> 
<% end %> 

怎麼過,即使含量爲零,如內容系[4..5]。每做|事情|由於顯而易見的原因正在運行並拋出錯誤。

如果條件不被滿足,我如何獲得多個HTML和Ruby代碼塊被忽略?

回答

1

如果代碼<% content[4..5].each do |something| %>被執行,那麼@content不是零,這是沒有辦法的紅寶石可能是錯誤的。

但是,如果它是像空數組或空字符串那麼它會通過測試。爲了覆蓋大範圍的可能「無狀」值(無,空,空......)使用方法:

<% unless @content.blank? %> 

讓我知道,如果它幫助。

+0

嗯,我得到的錯誤「未定義的方法'每個」近親:NilClass」,所以我認爲這是一個零 – Saad 2013-05-10 02:57:09

+0

你確定你的意思是'內容[4..5] .each'而不是'@content [4..5] .each'?反之亦然呢? – Raindal 2013-05-10 02:59:56

+0

哎呦,我輸入錯了,它的@content – Saad 2013-05-10 03:01:39

0

你可以使用:

<% unless @content.nil? %> 
     #true 
<%else%> 
     #false 
<%end%> 
+0

http:// 37signals .com/svn/posts/2699-making-sense-with-rubys-unless,bullet point 3「Never,ever,ever else ever else use else clause with an unless statement。」 – Saad 2013-05-10 03:00:40

+0

如果是這種情況,我們可以使用'<%if content.nil? %>'條件 – Lian 2013-05-10 03:40:09

0

確定@content肯定是零?請注意,一個對象可以是空的,而不是零。

如:

@含量= []

@含量= {}

將保持真正的@content =零,因爲它實際上不是不爲零! 。如果以前從未實例化過,則引用爲零。

如果您通過像Modelname,All這樣的數據庫查詢將數據存儲到@content,那麼您將得到一個空數組而不是null(nil)對象。另外,如果您從用戶接收@content作爲請求參數,那麼如果GET請求包含參數名稱但不包含任何值,則@content爲空,但不爲零。

ie http://yourdomain.com/somecontroller/index?name=10&age= 將params [:age]作爲空nil。

解決方案:

<% if @content.to_s.empty? != true %> 
<div> 
<h3>....</h3> 
<% content[0..3].each do |something| %> 
<li> .... <li> 
<% end %> 
<% content[4..5].each do |something| %> 
<li> .... <li> 
<% end %> 
<% content[5..11].each do |something| %> 
<li> .... <li> 
<% end %> 
<div> 
<% end %>