2012-05-15 4 views
1

Я работаю над проектом rails 3 и пытаюсь сделать частичное на странице профиля пользователя. Рендеринг работает отлично для всего, кроме фотографии. Когда я пытаюсь получить доступ к странице профиля пользователя, я получаю следующую ошибкурельсы 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

Я думаю, что существует небольшая беспорядочная единственная и множественная форма переменных 'photo', а также экземпляров и их локальных типов. Трудно понять, что вы действительно хотите сделать. Но я могу сказать, что, скорее всего, причиной ошибки является переменная nil photo внутри '<% = 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

Существует не фото с этим идентификатором в базе данных @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 %> 
Смежные вопросы