Sto cercando di capire i callback dei record attivi, ma non funzionano, come vorrei.Come si impostano gli attributi in un oggetto ActiveRecord prima di salvarlo?
ad es.
Modello
Checklist<ActiveRecord...
attr_accessible :item1, :item2, :done # they are all boolean
before_save :check_done
private
def check_done
if item1 && item2
write_attribute :done, true
else
write_attribute :done, false
end
end
questo non funziona se un'istanza di un oggetto nella console e cercare di salvarlo, l'operazione di salvataggio restituisce "false" :(
Cosa c'è di sbagliato in questo codice? grazie in anticipo :)
EDIT: sembra che ci sia qualcosa che non va con la chiamata "before_save", se uso "after_save", il codice funziona ... ma l'attributo non viene salvata (ovviamente). Questo è davvero strano
EDIT 2 Wierd ... i registri di sviluppo mostra questo
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[0m
[1m[35mChecklist Load (0.2ms)[0m SELECT "checklists".* FROM "checklists" ORDER BY checklists.id DESC LIMIT 1
WARNING: Can't mass-assign protected attributes: id
ma che è davvero strano, perché se tolgo la linea attr_accessible io ancora ottengo questo errore ...
EDIT 3 Se qualcuno chiede, sì, io sto cercando di aggiornare un esistente record.
EDIT 4 Sì, mi piace modificare Se scriv nella console
c.save => # false
c.errors => #<OrderedHash {}>
Perché vuoi dire con questo non funziona, quali sono gli errori? Puoi controllare chiamando yourobject.errors dopo yourobject.save – Mike
oh, ok Ho ottenuto questo myobject.errors # –
tabaluga
Che ne dici di 'myobject.errors.inspect' ?? – PeterWong