代码之家  ›  专栏  ›  技术社区  ›  will

找不到Sequel模型集架构

  •  4
  • will  · 技术社区  · 15 年前

    为什么下面的课不及格,有谁能做志愿者吗?

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

    我看过续集3.0 lib/文件夹和 set_schema 方法是在 ClassMethods 模块。

    我相信解决办法很简单。我想它应该“照原样”工作:

    require 'sequel'
    
    class User < Sequel::Model(:user)
    
      set_schema do
        set_primary_key :id
        String          :name
      end 
    end 
    
    3 回复  |  直到 12 年前
        1
  •  4
  •   will    15 年前

    推荐方式…

    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)
    
        2
  •  3
  •   will    15 年前

    答案是调用用于模式管理的插件。即

    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 
    
        3
  •  1
  •   joecorcoran    15 年前

    是的 Sequel::Model.plugin(:schema) 也为我工作。在文档中看不到它,我很困惑为什么,因为我有另一个工作项目使用 set_schema 不大惊小怪。