gpt4 book ai didi

ruby - 无法使用 DataMapper 在 SQLite 中创建新实体

转载 作者:数据小太阳 更新时间:2023-10-29 08:12:06 25 4
gpt4 key购买 nike

我是 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 并输入:

enter image description here

新用户保留在数据库中。

为什么我无法在运行时创建用户有任何想法吗?

附言控制台中没有记录任何错误。

P.S 2. 我发现问题出在 password_salt 和 password_hash 变量上。两者都是字符串,当我将它们传递给 create 函数时它不起作用,但是如果我将例如“test”传递给函数它就可以正常工作。当我记录这 2 个变量时,它们看起来也很好。

最佳答案

似乎来自 property :password_hash, Stringproperty :password_salt, String 我得到的字符串比 的字符串的默认长度长来自 DataMapper 的 property 方法。

解决方法如下:

property :password_hash, String, :length => 255

关于ruby - 无法使用 DataMapper 在 SQLite 中创建新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com