2009-05-17 5 views
3

Quelqu'un peut-il faire du bénévolat pourquoi la classe ci-dessous échoue?Sequel Modèle set_schema non trouvé

... src/model/user.rb:18: undefined method `set_schema' for User:Class (NoMethodError) 

Je l'ai regardé dans le répertoire lib/dossier Sequel-3.0 et la méthode set_schema est définie dans un module ClassMethods.

Je suis sûr que la solution est simple. Je pensais que cela devrait fonctionner "tel quel":

require 'sequel' 

class User < Sequel::Model(:user) 

    set_schema do 
    set_primary_key :id 
    String   :name 
    end 
end 
+1

S'il vous plaît re-modifier votre question et ajouter ses mises à jour au lieu d'ajouter plusieurs réponses. –

Répondre

3

Méthode recommandée ...

LOGGER = Object.new() 
def LOGGER.method_missing(name, args) 
    puts "[#{name}] #{args}" 
end 

Sequel::Model.plugin(:schema)      # I worked this out, but I can't find it documented 

DB = Sequel.sqlite('sql_test.db', :loggers => [LOGGER]) 

unless DB.table_exists?(:user) 
    DB.create_table :user do 
     set_primary_key :id 
     String   :name 
     String   :password 
     String   :eMail 
    end #create_table 
end #table exists 
class User < Sequel::Model(:user) 
3

La réponse est d'appeler le plug-in pour la gestion de schéma. Viz.

require 'sequel' 
require 'logger' 

LOGGER = Object.new() 
def LOGGER.method_missing(name, args) 
    puts "[#{name}] #{args}" 
end 

**Sequel::Model.plugin(:schema)**   # I still didn't find this documented 

DB = Sequel.sqlite('sql_test.db', :loggers => [LOGGER]) 


class User < Sequel::Model(:user) 

    set_schema do 
    set_primary_key :id 
    String   :name 
    end 
end 
1

Yep Sequel::Model.plugin(:schema) a travaillé pour moi aussi. Je ne peux pas le voir dans les docs et je suis perplexe quant à pourquoi, puisque j'ai un autre projet de travail qui utilise set_schema sans problème.

+0

Salut Joe ... Y Oui, j'ai examiné la nouvelle façon dont Sequel fonctionne maintenant, il utilise des plugins pour des choses comme le schéma, etc. Sur la liste de diffusion suite ils m'ont conseillé de le faire comme indiqué ci-dessous. Bonne chance, w. – will

Questions connexes