Ruby on rails-activerecord-tritt - wählen Sie Felder aus mehreren Tabellen
Modelle:
#StatusMessage model
class StatusMessage < ActiveRecord::Base
belongs_to :users
default_scope :order => "created_at DESC"
end
#User Model
class User < ActiveRecord::Base
has_many :status_messages
end
In controller I want to join dieser beiden Tabellen und bekommen Felder aus der Tabelle. zum Beispiel möchte ich email
Feld aus User
und status
Feld aus StatusMessage
. Wenn ich :
@status = User.joins(:status_messages)
Oder
@status = User.includes(:status_messages)
Gibt es mir nur die user-Tabelle Daten.
Wie kann ich das umsetzen dieser Anforderung?
InformationsquelleAutor Sayuj | 2011-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
includes
hier. Es lädt die Daten, so dass Sie nicht haben, eine andere SQL-Abfrage, wenn Sie@user.status_messages
.Und ja, man kann nicht wirklich sehen, der Effekt: Sie müssen überprüfen Sie Ihre Protokolle.
InformationsquelleAutor apneadiving
Zunächst, ich glaube nicht, dass es möglich (und sinnvoll), was Sie tun möchten. Der Grund dafür ist, dass die Beziehung zwischen
User
undStatusMessage
ist 1:n, das bedeutet, dass jeder Benutzer haben 0 bis n-status-Nachrichten. Wie sollen diese Massen von Attributen enthalten sein, die in Ihrer Benutzer-Modell?Ich denke, dass die Methode
joints
in der Klasse ActiceRecord hat eine andere Bedeutung, es ist Teil der Abfrage-Schnittstelle. Siehe auch die Frage LEFT OUTER joins in Rails 3Gibt es ähnliche Fragen im Netz, hier ist was ich gefunden habe, ist, dass Spiele am meisten:
@user.primary_status_message.status
InformationsquelleAutor mliebelt
Wenn Sie mit @status = User.enthält(:status_messages) dann Schienen eagerley lädt die Daten aller Tabellen.
Mein Punkt ist: wenn dieser User.enthält(:status_messages) es lädt die Daten von status_messages auch aber zeigt nur die Benutzer-Tabelle die Daten dann, wenn Sie wollen erste Benutzer status_messages dann haben Sie, um @user.erste.status_messages
InformationsquelleAutor Taimoor Changaiz