无法使用 DataMapper 在 SQLite 中创建新实体
Can't create new entity in SQLite with DataMapper
我是 Ruby 世界和 Sinatra 的新手,我正在尝试使用 SQLite3 和 Datamapper 作为 ORM 创建一个数据库。我已经安装了此操作所需的 gem。这是我制作数据库和模型的方法:
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db")
class User
include DataMapper::Resource
property :id, Serial
property :email, String, :required => true
property :first_name, String
property :last_name, String
property :password_hash, String
property :password_salt, String
end
DataMapper.finalize
我有一个 HTML 注册表单:
<form action="/signup" method="POST" accept-charset="utf-8">
<input type="text" name="first_name" placeholder="First Name">
<input type="text" name="last_name" placeholder="Last Name">
<input type="mail" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<button type="submit">Register me !</button>
</form>
这是我处理注册操作的方式:
post "/signup" do
password_salt = BCrypt::Engine.generate_salt
password_hash = BCrypt::Engine.hash_secret(params[:password], password_salt)
User.create(email: params[:email], first_name: params[:first_name], last_name: params[:last_name], password_hash: password_hash, password_salt: password_salt)
redirect to '/home'
end
当我执行此命令并在之后登录时 User.all 它不会记录我注册的用户。
但是如果我 运行 irb 并输入:
新用户留在数据库中。
为什么我无法创建用户 运行time?
P.S。控制台中没有记录任何错误。
P.S 2. 我发现 password_salt 和 password_hash 变量是问题所在。两者都是字符串,当我将它们传递给 create 函数时它不起作用,但是如果我将例如 'test' 传递给该函数它工作正常。当我记录这 2 个变量时,它们看起来也很好。
似乎来自 property :password_hash, String
和 property :password_salt, String
我得到的字符串比来自 DataMapper 的 property
方法的字符串的默认长度更长。
解决方法如下:
property :password_hash, String, :length => 255
我是 Ruby 世界和 Sinatra 的新手,我正在尝试使用 SQLite3 和 Datamapper 作为 ORM 创建一个数据库。我已经安装了此操作所需的 gem。这是我制作数据库和模型的方法:
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/development.db")
class User
include DataMapper::Resource
property :id, Serial
property :email, String, :required => true
property :first_name, String
property :last_name, String
property :password_hash, String
property :password_salt, String
end
DataMapper.finalize
我有一个 HTML 注册表单:
<form action="/signup" method="POST" accept-charset="utf-8">
<input type="text" name="first_name" placeholder="First Name">
<input type="text" name="last_name" placeholder="Last Name">
<input type="mail" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<button type="submit">Register me !</button>
</form>
这是我处理注册操作的方式:
post "/signup" do
password_salt = BCrypt::Engine.generate_salt
password_hash = BCrypt::Engine.hash_secret(params[:password], password_salt)
User.create(email: params[:email], first_name: params[:first_name], last_name: params[:last_name], password_hash: password_hash, password_salt: password_salt)
redirect to '/home'
end
当我执行此命令并在之后登录时 User.all 它不会记录我注册的用户。
但是如果我 运行 irb 并输入:
新用户留在数据库中。
为什么我无法创建用户 运行time?
P.S。控制台中没有记录任何错误。
P.S 2. 我发现 password_salt 和 password_hash 变量是问题所在。两者都是字符串,当我将它们传递给 create 函数时它不起作用,但是如果我将例如 'test' 传递给该函数它工作正常。当我记录这 2 个变量时,它们看起来也很好。
似乎来自 property :password_hash, String
和 property :password_salt, String
我得到的字符串比来自 DataMapper 的 property
方法的字符串的默认长度更长。
解决方法如下:
property :password_hash, String, :length => 255