0

ich mit Modellen analog dem folgenden bin arbeiten:Eager Laden funktioniert nicht in Rails 2.2.2

class Owner < ActiveRecord::Base 
    has_many :owned 
end 

class Owned < ActiveRecord::Base 
    belongs_to :owner 
end 

können Sie davon ausgehen, dass owned_id und owner_id an den richtigen Stellen sind. Das Problem ist, dass in einem Controller für eine andere Mvc-Kette in der App

nicht funktioniert. Ich bekomme die owner_id, Spalte, natürlich, aber kann dann nicht tun

@owned.owner # is just nil 

Was gibt? Ich meine, ich könnte die Aufgabe direkt ausführen, bevor ich das Ergebnis an die Ansicht übergebe:

aber das scheint einfach albern. Komm, beschäm mich. Was ist die offensichtliche Sache, die ich verpasst habe? Das funktioniert an anderen Orten in meiner App, aber ich kann die Unterschiede nicht erkennen. Gibt es einige gemeinsame Fallen? Alles hilft.

Vielen Dank

Antwort

1

Ich einfach weiter zu gewinnen. Das entsprechende 'Eigentümer'-Objekt wurde aus der Eigentümer-Tabelle gelöscht.

Die lustige Sache ist, bevor ich ein Konto erstellt habe, hatte ich Tonnen Karma auf meiner Cookie-basierten Identität. Dann wurden meine Kekse korrumpiert, und ich kann nicht mehr als dumme Fragen stellen, und mein Karma sitzt bei 1. Naja.

+0

Mach dir keine Sorgen;). Die meisten meiner Antworten haben 0 Punkte. Stellen Sie eine gute Frage ist nicht einfach. Versuche ein paar Fragen zu beantworten und gib nicht auf! – klew

1

Reputation auf StackOverflow basiert nicht auf Cookies. Möglicherweise müssen Sie sich erneut anmelden oder etwas.

Ihre Frage scheint zu implizieren, dass Sie ein owned_id Feld in der Besitzertabelle haben. Sie brauchen das nicht und sollten es entfernen.

Sie brauchen nur ein owner_id Integer-Feld in der eigenen Tabelle.

Sie können auf verschiedene Arten auf Ihre Datensätze und Beziehungen zugreifen. Zuerst beginnen wir mit dem Zugriff auf den Besitzerdatensatz.

owner = Owner.find(owner_id) 
owned = owner.owned # this is an array since you a 'has_many' relationship 

Normalerweise würde wollen Sie die im Besitz Datensätze in der folgenden Art und Weise zuzugreifen:

for owned in owner.owned 
puts owned.name # or access any other attributes 
end 

Wenn Sie die im Besitz Datensätze zugreifen möchten zuerst könnten Sie wie folgt vorgehen:

@owned = Owned.find(:all, :conditions => [ "owner_id = ?", owner_id ]) 
# @owned is an array so you need to iterate through it 
for owned in @owned 
    puts owned.owner.name # or access any other attribute from the owner 
end 

Sobald Sie mit diesen Abfragen fertig sind, können Sie sich über das mühsame Laden Sorgen machen, indem Sie Folgendes hinzufügen: include in Ihre find-Anweisungen. Beachten Sie, dass dies für die Optimierung von Interesse sein kann, aber nicht von Anfang an notwendig ist.

Ich hoffe, das hilft.

Verwandte Themen