Rails фото, пользователи, комментарии - PullRequest
2 голосов
/ 02 марта 2010

Это сводит меня с ума. У меня есть 3 модели. Пользователь, Фото, Комментарии.

Вот что я хочу сделать.

У пользователя много фотографий и комментариев

Фотография принадлежит пользователю и имеет много комментариев

А комментарий принадлежит пользователю и к фотографии

Итак, мои модели имеют следующие ассоциации:

Пользователь

has_many :photos, :dependent => :destroy
has_many :comments, :dependent => :destroy

Фото

belongs_to :user
has_many :users, :through => :comments
has_many :comments, :dependent => :destroy

Комментарий

belongs_to :photo, :user

Теперь я хочу показать фотографию, загрузить все комментарии к этой фотографии и отобразить каждый комментарий с информацией о пользователе.

Так что на фото-контроллере покажи действие у меня

@photo = Photo.find(params[:id], :include => :comments, :order => 'comments.created_at DESC')

А на фото / в виде просмотра

=render :partial => "/comments/partials/comment", :collection => @photo.comments, :as => :comment

Отображает комментарии, например. текст комментария хорошо, но когда внутри частичного я пытаюсь сделать:

%p=comment.user.fname
%p=comment.body

Выдает ошибку "неопределенный метод` fname 'для nil: NilClass "

Что-то странное в том, что я являюсь пользователем authlogic, поэтому вы должны войти в систему, чтобы оставить комментарий. Но вы можете видеть комментарии, даже если вы не вошли в систему. Когда я вышел из системы, это работает, найти. Когда я вхожу в систему, выдает ошибку.

Любая помощь будет высоко ценится, потому что она сводит меня с ума.

Кстати в моих маршрутах у меня

map.resources :users, :has_many => [:photos, :comments]
map.resources :photos, :has_many => [:comments, :users]

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2010

+ 1 за использование хамла

Я могу придумать несколько причин, по которым это может произойти

во-первых, что произойдет, если вы удалите следующую строку из кода?

# try removing this
%p=comment.user.fname

Затем ошибка переходит к следующей переменной (т. Е. Comment.body)

Если нет, то вы, по крайней мере, сузили его до переменной fname. в этом случае я хотел бы узнать, добавили ли вы, возможно, переменную fname в вашу модель после создания некоторых записей базы данных ... это будет означать, что некоторые записи hte не имеют связанных переменных fname. в этом случае вы можете решить эту проблему, очистив базу данных и перенастроив ее с нуля

Кроме того, есть ли у вас attr_accessible для переменной fname в вашей модели? Проверьте, что у вас есть этот набор для всех переменных.

Можете ли вы заглянуть в свою базу данных и убедиться, что для всех записей установлена ​​переменная fname?

Я понимаю, что вы хотите, чтобы это работало, но если вы не можете, нет ничего постыдного в использовании плагина disqus.com - он экономит ваше пространство в БД, помогает привлечь больше комментариев, так как многие люди уже имеют профили и дают у вас есть отличные возможности модератора ... с другой стороны, вы теряете брендинг, и вы не можете использовать свои собственные эффекты RJS ..

удачи

0 голосов
/ 02 марта 2010

Не уверен, что это будет иметь значение, но вы пытались отделить ассоциации принадлежащие_?

belongs_to :photo
belongs_to :user
...