Compte tenu du code ci-dessous, comment définir les valeurs par défaut pour le modèle. (Disons que la valeur par défaut de: nom doit être "chose").
require 'pp' require 'sequel' DB = Sequel.sqlite DB.create_table :items do primary_key :id String :name end items = DB[ :items ] class Item < Sequel::Model end Item.create :name => 'foobar' Item.create pp Item.all # => # >> [#<Item @values={:name=>"foobar", :id=>1}>, # >> #<Item @values={:name=>nil, :id=>2}>]
3 Réponses :
def method_missing(type, name = nil, opts = {}) name ? column(name, type, opts) : super end
La réponse de Subba est la manière recommandée de le faire dans la suite. Il appuie la valeur par défaut dans la base de données.
Si vous souhaitez avoir des valeurs par défaut dans le modèle au lieu de dans la base de données, je vous recommande d'utiliser un la différence entre alors vous devez utiliser avant_create code> ou
après_initialiser code> crochet pour faire eux: p>
après_initialize code> et
avant_create code> est quand ils sont appelés.
Avant_Create CODE> est recommandé, car il ne définira pas la valeur par défaut jusqu'à ce que la méthode de la base de données
Insérer code> est appelée. Cependant, si vous voulez: p>
après_initialiser code>. P> p> p>
Voulez-vous dire après_create code>?
After_Initialize Code> semble être un crochet de plug-in "appelé à toutes les instances de modèle sur la création (nouvelles instances et instances extraites de la base de données). Il existe principalement pour la compatibilité héritée, mais elle est toujours prise en charge." Voir suite.jeremyevans.net/rdoc/files/doc/model_hooks_rdoc.html a>
Notez juste que après_initialize code> a besoin d'un plugin - suite.jeremyevans.net/rdoc-plugins/classes/level/plugins/...
Je pourrais définir des valeurs par défaut avec l'utilisation de par défaut_setter a >. pour tous les modèles.
(Appelez ceci avant de définir des sous-classes qui souhaitent utiliser défaut_setter) p> uniquement pour un modèle particulier. P> Item.default_values[:name] = 'foobar'