Es macht mich verrückt. Ich habe 3 Modelle. Benutzer, Foto, Kommentare.
Hier ist, was ich tun möchte.
Ein Benutzer hat viele Fotos und Kommentare
Ein Foto gehört einem Benutzer und hat viele Kommentare
Und ein Kommentar gehört einem Benutzer und einem Foto
Also haben meine Modelle diese Beziehungen:
Benutzer
has_many :photos, :dependent => :destroy
has_many :comments, :dependent => :destroy
Foto
belongs_to :user
has_many :users, :through => :comments
has_many :comments, :dependent => :destroy
Kommentar
belongs_to :photo, :user
Ich möchte jetzt ein Foto anzeigen und alle Kommentare zu diesem Foto laden und jeden Kommentar mit den Benutzerinformationen anzeigen.
Also habe ich in der show Aktion des Fotos-Controllers
@photo = Photo.find(params[:id], :include => :comments, :order => 'comments.created_at DESC')
Und in der Foto/Show-Ansicht
=render :partial => "/comments/partials/comment", :collection => @photo.comments, :as => :comment
Es zeigt die Kommentare, z.B. den Kommentar-Text, richtig an, aber wenn ich im Partial folgendes mache:
%p=comment.user.fname
%p=comment.body
Es wirft den Fehler "undefined method `fname' for nil:NilClass"
Irgendwie seltsam ist, dass ich Authlogic benutze, also musst du eingeloggt sein, um einen Kommentar zu posten. Aber du kannst die Kommentare auch sehen, wenn du nicht eingeloggt bist. Wenn ich ausgeloggt bin, funktioniert es gut. Wenn ich mich einlogge, wirft es einen Fehler.
Jede Hilfe wäre sehr geschätzt, weil es mich verrückt macht.
Übrigens in meinen Routen habe ich
map.resources :users, :has_many => [:photos, :comments]
map.resources :photos, :has_many => [:comments, :users]
Danke