2012-04-11 9 views
1

Ich habe Probleme mit Datamapper, ein Modell nicht zu aktualisieren. Ich kann Modelle ohne Probleme erstellen und speichern. Ich habe raise_on_save_failure aktiviert und überprüft den Rückgabewert von update aber sehe keine Fehler. HierDatamapper "Update" aktualisiert Datensatz nicht

ist das Modell:

class UserProfile 
    include DataMapper::Resource 
    attr_accessor :id, :wants_hints, :is_beta_user 
    property :id, Serial #auto-increment integer key 
    property :is_beta_user, Boolean 
    property :wants_hints, Boolean 
    has 1, :user, :through => Resource 
end 

Und hier ist, wo es in der Steuerung aktualisiert:

if user = User.get(request.session[:user])  
    if request.params[:user_profile]   
    beta = request.params[:user_profile].has_key?('is_beta_user')   
    hints = request.params[:user_profile].has_key?('wants_hints')   
    user.user_profile.update({:is_beta_user => beta, :wants_hints => hints}) # returns true 
    Log.puts user.user_profile.errors.each {|e| Log.puts e.to_s} # returns empty list [] 
    end  
end 

Wenn der Controller genannt wird update immer wieder wahr, und es gibt nie Fehler in die Fehlerliste. Das Datamapper-Protokoll, das auf :debug festgelegt ist, zeigt nur die SELECT Abfragen zum Abrufen der user und user_profile und das ist alles. Warum könnte ich save ein neu erstelltes Modell, aber nicht update das gleiche Modell?

Antwort

2

Entfernen attr_accessor das Problem behoben. Von meiner Forschung wird attr_accessor für Attribute benutzt, die nicht in der Datenbank sind.

1

DataMapper save und update nicht unbedingt einen UPDATE Satz. Dies wird nur dann der Fall sein, wenn sich die Daten des Modellobjekts geändert haben. So zum Beispiel in dem folgenden Code wird die updatetrue zurück, aber nicht produzieren ein UPDATE:

# This generates an INSERT 
user = User.create(:login => 'kintaro', :email => '[email protected]') 

# This does NOT generate an UPDATE 
user.update(:login => 'kintaro') 

Wenn Sie das tun, wird jedoch ein UPDATE hergestellt werden:

# This generates an UPDATE 
user.update(:login => 'kintaro22') 

Vielleicht ist was passiert?

+0

Überprüft und doppelt überprüft. Es aktualisiert definitiv Attribute zu neuen Werten. – nathan

Verwandte Themen