2009-05-17 2 views
3

Может ли кто-нибудь добровольно объяснить, почему класс ниже не работает?Sequel Model set_schema не найден

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

Я посмотрел в Sequel-3.0 Lib/папку и метод set_schema определяется в ClassMethods модуле.

Я уверен, что решение прост. Я думал, что он должен работать «как есть»:

require 'sequel' 

class User < Sequel::Model(:user) 

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

Пожалуйста, повторно редактировать свой вопрос и добавить обновления к нему вместо добавления нескольких ответов. –

ответ

3

Рекомендуемый способ ...

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

Ответ заключается в вызове плагина для управления схемой. А именно

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) работал для меня тоже. Не вижу его в документах, и я озадачен тем, почему, так как у меня есть другой рабочий проект, который использует set_schema без суеты.

+0

Hi Joe ... Y Да, я просмотрел новый способ работы Sequel, он использует плагины для таких вещей, как схема и т. Д. В списке последующей рассылки они посоветовали мне сделать это, как показано ниже. Удачи, w. – will

Смежные вопросы