【问题标题】:How to use database (SQLite3) values in Ruby如何在 Ruby 中使用数据库 (SQLite3) 值
【发布时间】:2017-08-08 06:29:45
【问题描述】:

当我想检查 HTML 表单中的值是否等于数据库中的值(确实如此)时,它返回 false 而不是 true。

我需要更多代码吗?

代码:

password = params[:password]
password_db = @db.execute('SELECT password FROM dtbs WHERE username=?', [params[:username]]) 
puts password #returns llol123 
puts password_db #returns llol123 

check = (password==password_db) 
puts check #returns false

【问题讨论】:

  • 可能是您在密码字符串之前或之后的数据库中有一个空格符号。即你有 [llol123] 或 [llol123] 而不是 [llol123]。这可能会导致这个问题。尝试 puts "[#{password_db}]" 和 puts "[#{password}]" 看看你是否有任何不需要的空格。
  • 我建议使用 ORM 而不是手动编写查询。 Sequel 是我的推荐。一个好的 ORM 可以让你专注于代码并让它处理查询的生成。如果您想更改为不同的 DBM,您只需更改连接信息,ORM 会自动为您处理其余部分。

标签: sql ruby database sqlite


【解决方案1】:

我猜 password_db 的返回类型是在一个数组还是什么的?尝试获取值的类型

puts password.class
puts password_db.class

我猜他们是不同的。

【讨论】:

  • 如何进行检查?
  • password.inspect
  • 如果它们都是数组,那么这应该可以工作password.eql?(password_db)
【解决方案2】:

使用 (password_db[0]==password) 返回 true。

这是最好的方法。

【讨论】:

  • 根据你所说的 password_db 是一个数组,密码是一个字符串。它们是不同的类型:)
  • 或者你在 password_db 中有多个值
猜你喜欢
  • 2016-06-14
  • 2015-08-01
  • 1970-01-01
  • 2017-02-10
  • 2019-09-21
  • 2017-05-18
  • 2017-09-23
  • 2012-08-05
  • 2012-09-05
相关资源
最近更新 更多