我正在使用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()”)放在哪里?
答案 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"