Это сводит меня с ума. У меня 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]
Благодарности
Проверьте значение '' user_id' в комментарии модель. В 'script/console' напечатайте значение' user_id' (т. Е. 'Photo.comments.each {| c | p c.user_id}'). Если какое-либо значение равно 'nil', тогда в вашей логике создания комментариев должна быть ошибка. –
Спасибо user_id есть во всех комментариях. Все комментарии в методе Create принимают current_user.id как user_id, так как я использую authlogic, и вы должны войти в систему, чтобы добавить комментарий. – 2010-03-02 15:31:50
Странно, что если я попытаюсь сделать comment.photo.id, он найдет все в порядке, я могу получить фотографию, к которой принадлежит комментарий. Когда я comment.user.id, хотя он возвращает ноль, но только тогда, когда пользователь вошел в систему. – 2010-03-02 15:33:19