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

时间:2014-03-23 22:31:13

标签: ruby sinatra sequel

我正在使用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。我会把类变量(如name或id)和方法(如“do_something_with_a_specific_user()”)放在哪里?

1 个答案:

答案 0 :(得分:2)

  

我将把类变量(如name或id)和方法(如...)放在哪里。

对于表格中的属性,您不需要。加载数据库时,将使用从数据库中的User表推断的信息构建users类。如果您有id字段,那么模型实例将获得id属性等等。如果您需要表中没有的额外属性,请务必以通常的方式添加它们。方法也是如此。

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

请参阅http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Sequel+Models


在谈论模型时要小心“创建”这个词,因为在数据库中创建了一个记录并创建了一个实例,但大多数人都希望“创建”能够引用第一个,而不是(仅)最后。 new是“创建”的良好同义词,因此它会在数据库中生成新记录(如果您save,则只需使用create)。如果要获取实例(即记录),则在调用new时捕获实例,或检索现有记录。有很多方法可以检索记录,但[]是一个你会经常使用的方法。它作为一种选择是有意义的,因为数组和散列也使用该语法进行记录检索。

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"