2010-12-23 4 views
0

Je suis nouveau à Rails .. j'ai une table d'utilisateurs nommés (ID, nom) et une autre table qui contient les informations supplémentaires de l'utilisateur appelé user_details (id, user_id, ADDITIONAL_INFO) où additional_info est un hachage.Associations Rails

Dans le modèle utilisateur i ajouté une ligne

has_one :user_details 

Et dans le modèle User_Detail i ajouté une ligne

belongs_to :user 
serialize :additional_details, Hash 

maintenant dans le contrôleur Users j'ai une action

# set_user_empid to set the hash value empid in the additional_info column for the current_user 
    def set_user_empid 
      @user1 = current_user 
      @[email protected]_details 
      @user_detail1.additional_details[:empid] = params[:value] 
      @user_detail1.save 
      render :text => CGI::escapeHTML(@user_detail1.additional_details[:empid].to_s) 

    end 

Le @user1.user_details me montre l'erreur en tant que

NameError (Utilisateur non initialisée constante :: UserDetails):

Mais la même chose si je change le has_one à has_many je reçois le résultat réel ...

S'il vous plaît donner des suggestions ..

Répondre

1

La solution rapide est là pour changer has_one :user_details-has_one :user_detail, mais vraiment ce que vous voulez est de se débarrasser du modèle userDetail entièrement et il suffit de déplacer la colonne dans le modèle User, donc la table des utilisateurs a ces colonnes: id, name, additional_info, puis déplacez l'appel à serialize dans le modèle User. Aucune vraie raison d'avoir une table séparée juste pour les métadonnées.

+0

Je viens de changer le: has_one: user_details à has_one: user_detail et dans le contrôleur Users j'ai utilisé comme current_user.user_detail et il workz .. THank u – useranon

1

Je crois que puisque vous utilisez des détails d'utilisateur, pluralisé, il n'est pas capable de le ramasser. Pourriez-vous essayer d'utiliser has_one: user_detail