rails 3渲染错误div_for?

时间:2012-05-15 21:33:11

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用rails 3项目,并尝试在用户个人资料页面上呈现部分内容。渲染适用于除照片之外的所有内容。当我尝试访问用户个人资料页面时,我收到以下错误

  

undefined method model_name'代表NilClass:Class`

用户show.html.erb

def show
  @user= User.find(params[:id])
  @photo = Photo.find_by_id(params[:id])
end

在个人资料show.html.erb

<%= content_tag :h2, "My photos" %>
<% photo = @user.photos %>
<% if photo.blank? %>
  <%= link_to 'Create photo', new_photo_path %>
<% else %>
  <%= render :partial => 'photos/photo', :locals => {:photo => @photo} %>
<% end %>

以下是渲染的部分

<%= div_for photo do %>
 <table>
   <tr>
     <th>Title</th>
     <th>Date</th>
     <th>Extra</th>
   </tr>

   <tr>
     <td><%= photo.title %></td>
     <td><%= photo.date %></td>
     <td><%= photo.extra %></td>
     <td><%= link_to 'View photos', photo %></td>
   </tr>
 </table>
<% end %>

关于如何摆脱此错误的任何想法或建议?提前致谢

3 个答案:

答案 0 :(得分:1)

引发错误,因为在:locals => {:photo => @photo}中,@photo为空

请注意,您要发送列表@user.photos,而不是单个图片。

此处@photo = Photo.find_by_id(params[:id])您将通过id,photo_id获取照片。我相信你想找到用户的照片

@photos = @user.photos 

#for only one photo, also you need to make sure its not null
@photo = @user.photos.first

答案 1 :(得分:1)

数据库@photo = Photo.find_by_id(params[:id])

中没有此ID的照片

因此,您将nil个对象发送给partial。如果要显示所有用户照片,请尝试此操作。

<%= content_tag :h2, "My photos" %>
<% photos = @user.photos %>
  <% if photos.empty? %>
    <%= link_to 'Create photo', new_photo_path %>
  <% else %>
    <% photos.each do |photo| %>
      <%= render :partial => 'photos/photo', :locals => {:photo => photo} %>
    <% end %>
<% end %>

答案 2 :(得分:0)

当使用div_for注释为nil时,我会尝试通过迭代代码来访问它,就像我在下面所做的那样。然后现在可以访问照片了。

<% @photos.each do |photo| %>
  <%= div_for photo do %>
    Code here
  <% end %>
<% end %>