2016-06-02 12 views
0

Ich bin mir nicht sicher, ob ich richtig die Schienen eifrig Laden verwende.rails4 eifrig laden über 2 Modelle

Ich möchte post.user.profile.first_name in der Ansicht anrufen, die einfach post.user.name dank Delegierung sein wird. Ich möchte es mit einer Abfrage machen, also sollte Profil zusammen mit Benutzer bei der ersten Abfrage geladen werden. Ich bin mir nicht sicher, ob ich es gut mache.

Ist das der richtige Weg?

profile.rb

belongs_to :user 

user.rb

has_one :profile 
delegate :first_name, .... , to: :profile, allow_nil: true 
has_many :posts 

post.rb

belongs_to :user 
has_one :user_profile, through: :user, source: :profile 

posts_controller

Post.includes(:user, :user_profile).paginate....... 
+0

Probieren Sie es aus und sehen. Die Protokolldatei teilt Ihnen mit, welche Abfragen ausgeführt werden. – Eric

Antwort

2

Versuchen:

Post.joins(user: :profile).includes(user: :profile).paginate 

Die joins ist eine innere Verknüpfung für eine effiziente und genaue Abfrage zu gewährleisten. Die includes ist für die eifrige Last, wie Sie wissen.

+0

Peter, also sollte ich dir 'has_one: user_profile' nicht im Post Model verwenden? –