2011-08-07 6 views
0

J'ai un modèle de tâche et un modèle d'utilisateur.appartient à: class_name se comporte bizarrement

Une tâche peut être affectée à un utilisateur pour la traiter, tandis qu'un utilisateur peut se voir attribuer de nombreuses tâches.

Les noms de champs sont un peu décalés, donc j'essaie d'utiliser les options class_name etc., mais pour une raison quelconque, je reçois des résultats bizarres.

association Task

belongs_to :assigned_to, :class_name => 'User', :foreign_key => 'assigned_to' 

association utilisateur

has_many :assigned_tasks, :class_name => 'Task', :foreign_key => 'assigned_to' 

encore quand je regarde le sql étant produit lorsqu'une tâche est enregistrée, elle retourne zéro pour l'ID assigned_to (il est une colonne entière) .. et puis quand l'action tâches/index est appelée, je vois qu'il essaye de tirer un utilisateur où l'id = null comme il a été sauvé avec une valeur nulle dans le domaine ..

Jev J'ai probablement fait quelque chose de mal car je suis nouveau sur les rails, donc toute aide serait grandement appréciée.

Merci

+1

Pouvez-vous nous indiquer plus de code? Peut-être que depuis le contrôleur – house9

Répondre

0

Je pense que vous avez besoin _id avec le fk

:foreign_key => 'assigned_to_id' 

Je présume que votre nom de colonne db est assigned_to_id

De plus, cela est une très bonne ressource http://guides.rubyonrails.org/association_basics.html

+0

la colonne est nommée 'assigned_to' pour le moment, ce qui explique pourquoi je mets la foreign_key à ça ... comme j'avais l'impression que les rails prendraient juste le modèle associé et ajouteraient un "_id" à la fin de à moins que vous ne définissiez manuellement la clé étrangère. – Mike

+0

Si vous avez l'option de renommer la colonne, je le ferais. – house9

1

Je faisais deux choses mal:

  1. Lorsque j'ai créé la balise de sélection, j'ai oublié d'inclure la partie :user alors lorsque les paramètres ont été transmis, l'ID de l'utilisateur était en dehors de l'objet utilisateur.

  2. La propriété belongs_to: assigned_to a le même nom que la colonne de base de données; quand les paramètres sont arrivés correctement une fois le champ sélectionné, il se plaignait de la valeur passée en n'étant pas un objet. L'utilisateur attendu, la chaîne reçue, etc., etc. Le changement du nom de l'association a corrigé ce problème, ce qui est logique à 100% et pourquoi je devrais certainement changer le nom du champ de la base de données.

Questions connexes