0

我有一个用户模型、事件模型和资产模型。

一个用户可以有多个事件。一个事件可以有多个资产(图像)

现在我要做的是在页面上显示一个(任何)事件图像。目前我有以下。

控制器

@user = current_user  
@events = @user.events  

看法

<% @events.each do |e| %>
  <li>
  <% if e.assets.nil? %> 
    <%= image_tag("img36.jpg" , :size => "280x230") %>
  <% else %>
  <%=image_tag e.assets.first.path.url %>   
  <% end %>
  <div class="bar">
  <strong class="heading"><%= e.name %></strong>
  <ul class="menu">
    <li><a class="time" title="Time" href="#"><%= e.date %></a></li>
    <li><a class="comments" title="Comments" href="#">53</a></li>
    <li><a class="favourites" title="Favourites" href="#">87</a></li>
    <li><a class="view" title="Views" href="#">242</a></li>
 </ul>
 </div>
 <p><%= e.description %><a href="#">more &raquo;</a></p>
 </li>
<% end %>

“路径”是 assets 表中包含图像路径的字符串字段。我现在收到以下错误。

undefined method `path' for nil:NilClass

有任何想法吗?谢谢!

4

1 回答 1

2

问题是当没有与事件关联的资产时, 的值e.assets将是一个空数组,而不是nil. 所以发生的事情是e.assets通过nil?条件,然后你取e.assets.firstwhich is nil(因为数组是空的),然后你尝试调用path显然不起作用的那个。

要解决问题,只需更改:

<% if e.assets.nil? %> 

到:

<% if e.assets.empty? %>
于 2012-11-11T01:48:54.623 回答