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

使用Sequel时,如何在Ruby中定义类?

  •  0
  • Chris  · 技术社区  · 12 年前

    我正在使用Ruby和Sinatra和Sequel。现在我正在尝试为我的项目创建类,例如类“User”,它应该包含“First Name”和“Lastname”。在创建该类的实例时,应该可以直接设置如下名称 new User("Some","name") . 我使用Sequel连接到数据库并创建一个类::模型,如下所示:

    class User < Sequel::Model end
    

    我现在的问题是,我应该在哪里为类User添加构造函数并定义所有变量?我已经准备好了Sequel::Model“User”,我不能创建另一个类“User”但另一方面,我可以不向Sequel::Model类添加构造函数,因为这样会为User类的每个实例创建一个新的数据集,不是吗?我很困惑。

    如果这在这里有点难以理解的话,那就是简短的版本:我有一个包含继承Sequel::Model的类“User”的文件。我将把类变量(如name或id)和方法(如“do_something_with_a_specific_user()”)放在哪里?

    1 回复  |  直到 12 年前
        1
  •  2
  •   ian    12 年前

    我将把类变量(如name或id)和方法(如

    对于表中的属性,您不需要。加载数据库时 User 类将使用从 users 表。如果您有 id 字段,则模型实例将获得 身份证件 属性等。如果您需要表中没有的额外属性,请按常规方式添加它们。方法也是如此。

    此外,用于创建新模型实例的语法更像 user = User.new name: "php", lastname: "heini"

    看见 http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Sequel+Models


    在谈论模型时要注意“创建”一词,因为在数据库中创建记录和创建实例,但大多数人都希望“创建”指的是第一个,而不是(仅)最后一个。 new 是“create”的好同义词,因此它会导致数据库中的新记录(如果 save 否则只需使用 create ). 如果要获取实例(即记录),则在调用 ,或检索现有记录。有很多方法可以检索记录,但是 [] 这是一个你会用到的东西。这是一个有意义的选择,因为数组和散列也使用这种语法进行记录检索。

    class User < Sequel::Model
    
      def fullname
        "#{self.firstname} #{self.lastname}"
      end
    end
    
    # add your first user
    u1 = User.new firstname: "Bill", lastname: "Flowerpot"
    
    u1.fullname
    # => "Bill Flowerpot"
    
    u1.save
    
    u1.id
    # => 1
    
    # retrieve it later by index
    u1 = User[1]
    
    # Retrieve a user (that has already been added to the db)
    # by some other unique value
    u2 => User[firstname: "Ben"]
    u2.fullname
    # => "Ben Flowerpot"