我正在使用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 %>
关于如何摆脱此错误的任何想法或建议?提前致谢
答案 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])
因此,您将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 %>