1

我正在开发一个 on rails 3 项目,并试图在用户个人资料页面上呈现部分内容。渲染对除照片之外的所有内容都适用。当我尝试访问用户个人资料页面时,出现以下错误

undefined method模型名称'为 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 %>

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

4

3 回答 3

1

抛出错误是因为 in :locals => {:photo => @photo},@photo为 null

请注意,您发送的是列表@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
于 2012-05-15T21:38:44.983 回答
1

数据库中没有此id的照片@photo = Photo.find_by_id(params[:id])

因此,您将nil对象发送到部分。如果你想显示所有用户照片,试试这个。

<%= 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 %>
于 2012-05-15T21:53:51.750 回答
0

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

<% @photos.each do |photo| %>
  <%= div_for photo do %>
    Code here
  <% end %>
<% end %>
于 2012-05-16T15:31:55.027 回答