2010-10-21 87 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