2010-01-06 6 views
6

Dies ist wahrscheinlich eine dumme Frage, aber ich kann nicht scheinen, eine gute Antwort zu finden. Ich möchte wissen, wie man am besten auf das Modell zurückgreift, zu dem ein Objekt gehört.Schienen: Bezug nehmend auf das Modell gehört das Objekt zu

Zum Beispiel:

class User < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :users 
end 

Also, um die Beiträge des Benutzers, kann ich user.posts verwenden, aber die Post des Benutzers zu erhalten, kann ich das Gegenteil nicht tun: post.user

Wenn Ich füge eine "Benutzer" -Methode zum Post-Modell hinzu, es funktioniert, aber es scheint nicht der beste Weg zu sein.

class Post < ActiveRecord::Base 
    belongs_to :users 

    def user 
    User.find(self.user_id) 
    end 
end 

Wenn Sie in diesem Blog-Eintrag aussehen http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips als Beispiel können Sie sehen, dass der Autor post.user.username verwendet, die nicht aus der Box funktioniert auch: include => [: Benutzer], was auch nicht funktioniert, auch mit der Methode "user" im Post-Modell.

Ich weiß, das ist rudimentär, also vielen Dank für Ihre Geduld. Ich möchte nur den besten Weg kennen, um diese Beziehung zu erreichen.

Mein Hauptziel ist es mit geschachtelten enthält schreiben "findet", die wie so den Benutzer verweisen:

post = Post.find (: alle,: include => [: user])

Wenn ich dies versuche, bekomme ich "ActiveRecord :: ConfigurationError: Assoziation mit dem Namen 'Benutzer' wurde nicht gefunden; vielleicht haben Sie es falsch geschrieben?"

Vielen Dank.

Antwort

8

Ich bin ein bisschen neu zu Rails, aber dies sollte automatisch funktionieren ...

Ah - Sie die übergeordnete Klasse in Post als belongs_to :users benannt haben; Da es jedoch nur einem einzelnen Benutzer gehört, erwartet Rails belongs_to :user (oder natürlich belongs_to :users, :class_name => "User").

Das heißt:

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

die Arbeit machen sollte.

+0

Danke. Das ist offiziell die dümmste Frage, die ich je gestellt habe. Ich kann nicht glauben, dass ich das nicht gesehen habe. Ich frage mich, warum es auch funktioniert, wenn du es im Plural machst ... – Shagymoe

0

Gehört zu einem Modell sollte in Singular sein. wie

belongs_to :user