2 Stimmen

Rails Fotos, Benutzer, Kommentare

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

0voto

phuphighter Punkte 31

Nicht sicher, ob das einen Unterschied machen wird, aber haben Sie versucht, die belongs_to-Verknüpfungen zu trennen?

belongs_to :photo
belongs_to :user

0voto

stephenmurdoch Punkte 32826

+1 für die Verwendung von haml

Ich kann mir ein paar Gründe vorstellen, warum das passieren könnte

Erstens, was passiert, wenn Sie die folgende Zeile aus Ihrem Code entfernen?

# Versuchen Sie dies zu entfernen
%p=comment.user.fname

Geht der Fehler dann auf die nächste Variable über (d.h. comment.body)?

Wenn nicht, dann haben Sie es zumindest auf die fname Variable eingegrenzt. In diesem Fall frage ich mich, ob Sie möglicherweise die fname Variable zu Ihrem Modell hinzugefügt haben, nachdem Sie einige anfängliche Datenbankeinträge erstellt haben... dies würde bedeuten, dass einige der Einträge keine zugehörigen fname Variablen haben. In diesem Fall können Sie das Problem beheben, indem Sie die Datenbank bereinigen und von vorne beginnen.

Haben Sie auch attr_accessible für die fname Variable in Ihrem Modell festgelegt? Überprüfen Sie, ob dies für alle Variablen festgelegt ist.

Können Sie einen Blick in Ihre Datenbank werfen und sicherstellen, dass alle Einträge eine fname Variable festgelegt haben?

Ich verstehe, dass Sie dies zum Laufen bringen möchten, aber wenn es nicht klappt, gibt es keinen Grund, das disqus.com-Plugin zu verwenden - es spart Platz in der Datenbank, hilft dabei, mehr Kommentare anzuziehen, da viele Leute bereits Profile haben, und bietet Ihnen einige raffinierte Moderator-Funktionen... auf der anderen Seite verlieren Sie Ihr Branding und können keine Ihrer eigenen rjs-Effekte verwenden...

viel Glück

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X