2010-12-23 8 views
0

Ich bin neu in Rails .. ich eine Tabelle mit dem Namen Benutzer habe (id, name) und eine andere Tabelle, die die zusätzliche Information des Benutzers user_details (id, user_id, additional_info), wo additional_info genannt hat ist ein Hash.Verbände in Rails

Im User-Model i eine Linie

has_one :user_details 

Und im User_Detail Modell habe ich eine Linie

belongs_to :user 
serialize :additional_details, Hash 

Jetzt im Benutzer-Controller Ich habe eine Aktion

# 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 

Die obige @user1.user_details zeigt mir den Fehler als

Nameerror (nicht initialisierte Konstante User :: Userdetails):

Aber die gleiche Sache, wenn ich die has_one ändern i has_many bin das tatsächliche Ergebnis bekommen ...

Bitte Anregungen geben ..

Antwort

1

Die schnelle Lösung ist hier has_one :user_details-has_one :user_detail, zu ändern, aber wirklich wollen, was Sie ist der UserDetail Modell vollständig loszuwerden und nur die Spalte in das User Modell zu bewegen, so dass die Benutzer-Tabelle Hat diese Spalten: id, name, additional_info und dann den Anruf zu serialize in das User Modell verschieben. Kein wirklicher Grund, eine separate Tabelle nur für Metadaten zu haben.

+0

Ich habe gerade geändert: has_one: user_details zu has_one: user_detail und in der Benutzer-Controller habe ich wie current_user.user_detail und es funktioniert .. Thank u – useranon

1

Ich glaube, da Sie user_details, pluralized verwenden, ist es nicht in der Lage, es aufzunehmen. Sie könnten versuchen, has_one mit: user_detail