"Correct" est un mot dangereux en Ruby. Il y a généralement plus d'une façon de faire quelque chose. Si vous savez que vous allez toujours veulent cette valeur par défaut pour cette colonne sur cette table, les définir dans un fichier de migration de la base de données est la manière la plus simple :
class SetDefault < ActiveRecord::Migration
def self.up
change_column :people, :last_name, :type, :default => "Doe"
end
def self.down
# You can't currently remove default values in Rails
raise ActiveRecord::IrreversibleMigration, "Can't remove the default"
end
end
Comme ActiveRecord découvre automatiquement les propriétés de votre table et de vos colonnes, la même valeur par défaut sera définie dans tous les modèles qui l'utilisent dans n'importe quelle application Rails standard.
Cependant, si vous ne souhaitez que les valeurs par défaut soient définies dans des cas spécifiques - par exemple, s'il s'agit d'un modèle hérité qui partage une table avec d'autres - une autre façon élégante est de le faire directement dans votre code Rails lors de la création de l'objet modèle :
class GenericPerson < Person
def initialize(attributes=nil)
attr_with_defaults = {:last_name => "Doe"}.merge(attributes)
super(attr_with_defaults)
end
end
Ensuite, lorsque vous effectuez une GenericPerson.new()
il fera toujours remonter l'attribut "Doe" jusqu'à Person.new()
à moins que vous ne la remplaciez par quelque chose d'autre.
1 votes
Quels sont ces objets, comment sont-ils consommés / utilisés ? Sont-ils utilisés lors du rendu des vues ou pour la logique du contrôleur ?
3 votes
Si vous parlez d'un objet ActiveRecord, je dois vous dire qu'il n'y a pas de solution sensée au problème des "valeurs par défaut". Il n'y a que des bidouillages insensés, et les auteurs de rails ne semblent pas penser que cette fonctionnalité en vaille la peine (incroyable comme seule la communauté des rails l'est ).
0 votes
Puisque la réponse acceptée et la plupart des réponses se concentrent sur ActiveRecords, nous supposons que la question originale portait sur AcitveRecords. Par conséquent, les doublons possibles de stackoverflow.com/questions/328525/
0 votes
Duplicata possible de Comment puis-je définir des valeurs par défaut dans ActiveRecord ?