Dans Ruby on Rails v3.2.8, en utilisant le after_initialize
rappel ActiveRecord, vous pouvez appeler une méthode dans votre modèle qui attribuera les valeurs par défaut pour un nouvel objet.
Le rappel after_initialize est déclenché pour chaque objet trouvé et instancié par un chercheur, after_initialize étant également déclenché après l'instanciation de nouveaux objets ( voir Rappels ActiveRecord ).
Donc, IMO, cela devrait ressembler à quelque chose comme:
class Foo < ActiveRecord::Base
after_initialize :assign_defaults_on_new_Foo
...
attr_accessible :bar
...
private
def assign_defaults_on_new_Foo
# required to check an attribute for existence to weed out existing records
self.bar = default_value unless self.attribute_whose_presence_has_been_validated
end
end
Foo.bar = default_value
pour cette instance, sauf si l'instance contient une attribute_whose_presence_has_been_validated
sauvegarde / mise à jour précédemment en cours. Le default_value
sera ensuite utilisé avec votre vue pour rendre le formulaire en utilisant default_value
pour l' bar
attribut.
Au mieux, c'est du piratage ...
EDIT - utilisez 'new_record?' pour vérifier si l'instanciation à partir d'un nouvel appel
Au lieu de vérifier une valeur d'attribut, utilisez la new_record?
méthode intégrée avec des rails. Ainsi, l'exemple ci-dessus devrait ressembler à:
class Foo < ActiveRecord::Base
after_initialize :assign_defaults_on_new_Foo, if: 'new_record?'
...
attr_accessible :bar
...
private
def assign_defaults_on_new_Foo
self.bar = default_value
end
end
C'est beaucoup plus propre. Ah, la magie de Rails - c'est plus intelligent que moi.