2010-10-21 115 views
1

我有一個顯示嵌套關係的窗體。呼叫呈現嵌套子對象就像下面進行:根據條件渲染,rails

<% if @fpimgblocks %> 
  <% f.fields_for @fpimgblocks do |builder| %> 
    <%= render 'fpimgblock_fields', :f => builder %> 
  <% end %> 
<% end %> 

@fpimgblocks是查找的結果,我已經驗證有任何結果,所以我希望這不會渲染。但是,即使未對對象進行初始化,也會呈現局部。當我提交表單時,這會返回一個nil_class錯誤。

if語句中的語法是錯誤的還是什麼?我試圖改變爲「除非@ fpimgblocks.nil但沒有改變

+1

你試過,<%@除非%fpimgblocks.blank?> ! 210這個http://stackoverflow.com/questions/885414/a-concise-explanation-of-nil-v-empty-v-blank-in-ruby-on-rails可能有幫助 – 2010-10-21 14:08:04

回答

6

@fpimgblocks不是零爲你期待因爲它是一個發現的結果,它實際上是一個空數組更改此:?。

<% if @fpimgblocks %> 

此:

<% unless @fpimgblocks.empty? %> 

,它會工作我希望這有助於

+2

.blank?在這種情況下可能更好,因爲它處理@fpimgblocks爲零的情況。否則@ fpimgblocks.empty?會導致一個NoMethodError。 – 2010-10-21 15:49:33

+2

你是對的,它會 - 雖然我喜歡'empty?',因爲它更具體,而且在調用Object.all或Object.find(:all )',這個例子就是這種情況。 – 2010-10-21 15:52:34

+0

完美,謝謝! – nktokyo 2010-10-22 12:20:22