2016-06-20 10 views
2

Ich versuche nur bestimmte Spalten mit eager_load zu wählen, aber ich stehe vor dem Problem, dass es meine 'Select' storniert.Rails 4 - Wählen Sie mit eiger_load

Modell:

class Timeline < ActiveRecord::Base 
    belongs_to :timeline_category, foreign_key: :timeline_category_id 
    belongs_to :user, foreign_key: :user_id 
    scope :with_relations, -> { eager_load(:timeline_category).eager_load(:user).order(created_at: :desc) 
end 

Abfrage:

Timeline.select('timelines.*, users.username, timeline_categories.icon').eager_load(:timeline_category).eager_load(:user) 

Ich habe auch versucht:

Timeline.select('timelines.*, users.username, timeline_categories.icon').with_relations 

Aus irgendeinem Grund hält sie alle Spalten aller drei Tabellen Auswahl . Wie kann ich es reparieren?

+0

Ich habe ein ähnliches Problem hat, wie Ich erinnere mich, Sie können nur benutzerdefinierte Spalten hinzufügen, aber Sie können sie nicht selektiv abrufen, da die Methode immer alle Spalten abruft. – potashin

Antwort

0

Ich bin mir nicht sicher, ob es möglich ist oder nicht, aber man kann so etwas tun:

relation = TimeLine.joins(:timeline_category, :user).select('users.username AS username, timeline_categories.icon AS categories_icon') 

und erhält dann die Felder mit relation.each{ |timeline| puts "username: #{timeline.username} and icon: #{timeline.categories_icon}" }