Estoy tratando de entender las devoluciones de llamadas de registro activo, pero no funcionan, como quiero.¿Cómo configuro atributos en un objeto ActiveRecord antes de guardarlo?
p. Ej.
Modelo
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
esto no funciona si una instancia de un objeto en la consola y tratar de guardarlo, la operación de almacenamiento devuelve "falso" :(
Qué le pasa a este código? gracias de antemano :)
EDIT: parece que hay algo mal con la llamada "before_save", si uso "after_save", el código funciona ... pero el atributo no se guarda (obviamente) Eso es realmente extraño
EDIT 2 Extraño ... los registros de desarrollo muestra este
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
pero que es realmente extraño, porque si se quita la línea attr_accessible Yo todavía sale este error ...
EDITAR 3 Si alguien pregunta, sí, yo estoy tratando de actualizar una existente registro.
EDITAR 4 Sí, me gusta editar Si escribo en la consola
c.save => # false
c.errors => #<OrderedHash {}>
¿Por qué quiere decir con esto no funciona, ¿cuáles son los errores? Puede comprobar llamando a yourobject.errors después de yourobject.save – Mike
oh, está bien Tengo este myobject.errors # –
tabaluga
¿Qué tal 'myobject.errors.inspect' ?? – PeterWong