7
votes

Comment les valeurs par défaut peuvent-elles être définies par défaut?

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}>]


0 commentaires

3 Réponses :


4
votes
def method_missing(type, name = nil, opts = {})
     name ? column(name, type, opts) : super
end

0 commentaires

7
votes

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 avant_create ou après_initialiser crochet pour faire eux: xxx

la différence entre après_initialize et avant_create est quand ils sont appelés. Avant_Create 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 est appelée. Cependant, si vous voulez: xxx

alors vous devez utiliser après_initialiser .


2 commentaires

Voulez-vous dire après_create ? After_Initialize 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


Notez juste que après_initialize a besoin d'un plugin - suite.jeremyevans.net/rdoc-plugins/classes/level/plugins/...