0

Je travaille avec des modèles analogues à ce qui suit:chargement Désireuse ne fonctionne pas dans Rails 2.2.2

class Owner < ActiveRecord::Base 
    has_many :owned 
end 

class Owned < ActiveRecord::Base 
    belongs_to :owner 
end 

Vous pouvez présumer que owned_id et owner_id sont dans les bons endroits. Le problème est que, dans un contrôleur pour une chaîne de mvc différente dans l'application,

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

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

@owned.owner # is just nil 

Ce qui donne? 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. Viens, embarrasse-moi. Quelle est la chose évidente que j'ai manquée? Cela fonctionne dans d'autres endroits de mon application, mais je ne peux pas repérer les différences. Y a-t-il des pièges communs? Tout est utile.

Merci

Répondre

1

Je continue juste à gagner. L'objet 'Propriétaire' correspondant a été supprimé de la table des propriétaires. Le plus drôle est que, avant de créer un compte, j'avais des tonnes de karma sur mon identité à base de cookies. Ensuite, mes cookies ont été corrompus, et je ne peux plus rien demander d'autre que des questions stupides, et mon karma se trouve à 1. Oh bien.

+0

Ne vous inquiétez pas;). La plupart de mes réponses ont 0 point. Poser une bonne question n'est pas facile. Essayez de répondre à quelques questions et n'abandonnez pas! – klew

1

La réputation sur StackOverflow n'est pas basée sur les cookies. Vous devrez peut-être vous reconnecter ou quelque chose.

Votre question semble impliquer que vous avez un champ owned_id dans la table owner. Vous n'avez pas besoin de cela et devriez l'enlever.

Vous avez juste besoin d'un champ entier owner_id dans la table possédée.

Vous pouvez accéder à vos enregistrements et relations de plusieurs façons. Commençons par accéder à l'enregistrement du propriétaire en premier.

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 pourriez 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 ces requêtes fonctionnent correctement, vous pouvez vous inquiéter du chargement en ajoutant: include dans vos instructions find. Notez que cela peut être intéressant pour l'optimisation mais pas nécessaire dès le départ.

J'espère que cela aide.