Question

Je travaille avec des modèles analogues à ce qui suit:

class Owner < ActiveRecord::Base
  has_many :owned
end

class Owned < ActiveRecord::Base
  belongs_to :owner
end

Vous pouvez présumez que owned_id et owner_id sont dans les bons endroits. Le problème est que, dans un dispositif de commande pour une chaîne mvc différent dans l'application,

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

ne fonctionne pas. Je reçois la owner_id, colonne, naturellement, mais il ne peut alors faire

@owned.owner # is just nil

Qu'est-ce qui se passe? Je veux dire, je pourrais faire l'affectation directe avant de passer le résultat à la vue:

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

mais que tout semble stupide. Allez, me mettre dans l'embarras. Quelle est la chose évidente que je l'ai manqué? Cela fonctionne dans d'autres endroits dans mon application, mais je ne peux pas repérer les différences. Y a-t-il des pièges communs? aide quelque chose.

Merci

Était-ce utile?

La solution

Je continue juste à gagner. L'objet « propriétaire » correspondant a été supprimé de la table des propriétaires.

La chose drôle est, avant que je crée un compte, j'ai eu des tonnes de karma sur mon identité basée sur les cookies. Puis mes biscuits se sont corrompus, et je ne peux pas demander quoi que ce soit, mais des questions stupides plus, et mon karma est assis à 1. Oh bien.

Autres conseils

Réputation sur StackOverflow est cookie ne se base pas. Vous devrez peut-être vous connecter à nouveau ou quelque chose.

Votre question semble impliquer que vous avez un champ owned_id dans la table propriétaire. Vous n'avez pas besoin et que devez le supprimer.

Vous avez juste besoin d'un champ entier owner_id dans la table propriété.

Vous pouvez accéder à vos dossiers et les relations dans un certain nombre de façons. Tout d'abord, commençons par accéder au record du premier propriétaire.

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

Normalement, vous voudriez accéder aux enregistrements appartenant à la manière suivante:

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

Si vous souhaitez accéder aux enregistrements appartenant d'abord, vous pouvez faire ce qui suit:

@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

Une fois que vous avez ces requêtes fonctionne correctement, vous pouvez vous soucier de chargement désireux en ajoutant: inclure dans vos déclarations de trouver. Notez que cela peut être intéressant pour l'optimisation, mais pas nécessaire dès le départ.

J'espère que cette aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top