Frage

Ich arbeite mit Modellen analog zu dem folgenden:

class Owner < ActiveRecord::Base
  has_many :owned
end

class Owned < ActiveRecord::Base
  belongs_to :owner
end

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

@owner = Owned.find_by_id(owned_id, :include => :owner)

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

@owned.owner # is just nil

Was soll das? Ich meine, ich könnte die Zuordnung tun direkt bevor das Ergebnis auf die Ansicht übergeben:

@owned.owner = Owner.find_by_id(@owned.owner_id)

, aber das scheint nur dumm. Komm, in Verlegenheit bringen mich. Was ist die offensichtliche Sache, die ich verpasst habe? Dies funktioniert in anderen Orten in meinem app, aber ich kann nicht die Unterschiede erkennen. Gibt es einige gemeinsame Fallen? Alles, was hilft.

Danke

War es hilfreich?

Lösung

ich gewinnen gerade halten. Das entsprechende ‚Eigentümer‘ Objekt war vom Besitzer Tabelle gelöscht.

Das Komische ist, bevor ich ein Konto erstellt, ich Tonnen von Karma auf meiner Cookie-basierte Identität hatte. Dann wurde meine Cookies beschädigt, und ich kann nichts, aber dummen Fragen mehr stellen, und mein Karma sitzt am 1. Oh gut.

Andere Tipps

Ruf auf Stackoverflow nicht Cookies in Ihrem Browser. Sie können wieder oder etwas einloggen.

Ihre Frage scheint zu implizieren, dass Sie ein owned_id Feld in der Eigentümer-Tabelle haben. Sie brauche das nicht und sollte es entfernen.

Sie müssen nur ein owner_id Integer-Feld in der Besitz-Tabelle.

Sie können Ihre Datensätze und Beziehungen in einer Reihe von Möglichkeiten zuzugreifen. Zunächst lassen Sie uns beginnen, indem zunächst die Eigentümer Datensatz zugreifen.

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

Normalerweise würden wollen Sie den 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 vor:

@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

Wenn Sie diese Abfragen haben adaequat Sie eifrig Laden kümmern kann durch Zugabe von: include in Ihrem Fund Aussagen. Beachten Sie, dass dies von Interesse für die Optimierung sein kann, aber von dem nicht nötig bekommen gehen.

Ich hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top