未定义的方法`image_file_name'代表nil:NilClass

时间:2013-12-29 22:26:40

标签: ruby-on-rails

我正在努力弄清楚为什么我不能让这个帮助器正常运行。 Item类具有对Product类的嵌套引用。如何在下面的帮助函数中正确访问“Product”属性?

module ItemHelper

def image_for(item)
   if item.product.image_file_name.blank?
     image_tag('placeholder.png')
   else
     image_tag(item.product.image_file_name)
   end
 end
end

我收到以下错误。 “nil的未定义方法`image_file_name':NilClass” 它是在另一个html文件中访问此image_for函数时发生的。我认为这是因为我无法访问item.product,我做错了。


以下代码实际上是功能代码,表明我已经设置了我认为是数据库和模型中正确的关系。

<ul id="items">
  <% @items.each do |item| %>
<li>
  <article class="item">
    <header>
      <h2><%= item.product.name %></h2>
    </header>
    <p>
      <%= truncate(item.description, length: 150, separator: ' ') %>
    </p>
    <table>
      <tr>
        <th>Price</th>
        <td><%= item.product.price %></td>
      </tr>
    </table>
    <footer>
    </footer>
  </article>
    </li>
  <% end %>
</ul>

下面是我用来调用辅助函数的代码。

<article id="hint" class="hint">
  <header>
    <%= image_for(@hint) %>
    <h1><%= @hint.name %></h1>
  </header>
  <p>
    <%= @hint.description %>
  </p>
  <footer>

  </footer>
</article>

有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

试试这段代码:

def image_for(item)
  if item.product.nil? || item.product.image_file_name.blank?
    image_tag('placeholder.png')
  else
    image_tag(item.product.image_file_name)
  end
end