我的代码是:
#!/usr/bin/ruby
require 'mysql'
@mycon = Mysql.new 'localhost', 'user', '', 'test'
time_check = @mycon.query("SELECT v_status FROM test.movement WHERE test.movement.id = '1001'")
time_check.each_hash do |test_result|
test_report = test_result['v_status']
if test_report.empty?
@test_says = "UNKNOWN"
else
@test_says = test_report
end
end
puts @test_says
查询'1001'没有返回任何内容,因为它不在数据库中,但由于某种原因,if test_report.empty?
无法正常工作。我也试过了nil?
但是没有用。如果数据库中没有记录,我需要将@test_says
更新为“未知”。
如果我查询数据库中确实存在的内容,那么我会得到预期的结果。
在IRB中,寻找不在数据库中的东西,我回来了:
=> #<Mysql::Result:0x00000000f482b0>
否则我在数据库中得到预期的结果。
任何人都可以帮助我获得UNKNOWN的预期结果,而不会对数据库造成任何打击吗?
更新 在@K M Rakibul Islam的帮助下,我转而使用mysql2 gem和以下代码:
#!/usr/bin/ruby
require 'mysql2'
@mycon = @mycon = Mysql2::Client.new(:host => "localhost", :username => "user", :database => "test")
time_check = @mycon.query("SELECT v_status FROM test.movement WHERE test.movement.id = '1001'")
if time_check.count == 0
@test_says = "UNKNOWN"
else
time_check.each do |test_result|
test_report = test_result['v_status']
@test_says = test_report
end
end
puts @test_says
根据需要返回UNKNOWN
。我必须如上所示移动.count
部分因为我的var test_report
只是一个字符串而不是mysql2 :: result。
答案 0 :(得分:0)
if test_report.count == 0
@test_says = "UNKNOWN"
else
@test_says = test_report
end
您必须确保在count
对象上致电Mysql2::Result
。
答案 1 :(得分:0)
使用mysql2 gem,您可以使用each
代替each_hash
。
这应该有效,并且在没有结果时永远不应该调用块:
time_check.each do |test_result|
test_report = test_result['v_status']
...
end