2010-03-02 6 views
2

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

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

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

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

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

Так что мои модели имеют такие ассоциации:

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

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 

Он бросает ошибку «неопределенный метод` имя_файла»для ноль: NilClass»

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

Любая помощь была бы очень признательна, потому что она меня заводила.

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

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

Благодарности

+1

Проверьте значение '' user_id' в комментарии модель. В 'script/console' напечатайте значение' user_id' (т. Е. 'Photo.comments.each {| c | p c.user_id}'). Если какое-либо значение равно 'nil', тогда в вашей логике создания комментариев должна быть ошибка. –

+0

Спасибо user_id есть во всех комментариях. Все комментарии в методе Create принимают current_user.id как user_id, так как я использую authlogic, и вы должны войти в систему, чтобы добавить комментарий. – 2010-03-02 15:31:50

+0

Странно, что если я попытаюсь сделать comment.photo.id, он найдет все в порядке, я могу получить фотографию, к которой принадлежит комментарий. Когда я comment.user.id, хотя он возвращает ноль, но только тогда, когда пользователь вошел в систему. – 2010-03-02 15:33:19

ответ

0

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

belongs_to :photo 
belongs_to :user 
+0

Спасибо это не проблема определенно – 2010-03-03 18:05:48

0

+1 для использования HAML

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

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

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

ли ошибка, то перейти к следующей переменной (т.е. comment.body)

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

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

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

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

удачи

+0

Привет, Спасибо за ответ Проблема возникает, когда я пытаюсь получить пользователю из комментария. Когда я вызываю фотографию из комментария, она работает. База данных чиста, в ней нет записей, и проблема существует, но только когда я вошел в систему. Я думаю, что между authlogic и моими моделями существует какая-то смесь. – 2010-03-03 18:08:13

Смежные вопросы