2012-05-15 175 views
1

我正在開發一個on rails 3項目,並試圖在用戶個人資料頁面上呈現部分內容。除了照片之外,渲染工作正常。當我試圖訪問用戶的個人資料頁,我得到以下錯誤rails 3渲染錯誤div_for?

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 %> 

這是部分它是撕裂ering

<%= 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

我覺得有一些混亂的'照片'變量的單數和複數形式,以及它們的實例和局部類型。很難理解,你真的想做什麼。但我可以說,最有可能的錯誤原因是'<%= div_for photo do%>'中的無照片變量。 – Flexoid

回答

0

當使用div_for註釋是零,所以我會嘗試訪問它迭代通過代碼就像我在下面做的。然後照片應該現在可以訪問。

<% @photos.each do |photo| %> 
    <%= div_for photo do %> 
    Code here 
    <% end %> 
<% end %> 
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 
+0

謝謝,因爲某些原因,在軌道控制檯檢查照片是零,但在添加@ user.photos到我的收藏集後,部分事物開始起作用 – Yooku

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 %>