我有一个名为sk.db的SQLite3数据库,其中有一个名为Sked的表,它显示了一个与列日期相关的体育比赛计划。下面的代码只给出了第一个匹配的行而不是所有匹配的行,其中应该有很多行。我在where(...)
内使用它并不重要,它只给了我第一个匹配的行。如果我使用schedule.all
,它会为我提供整个数据库,但如果我使用where
则只提供第一个匹配的行。
我哪里错了?
.RB
require 'date'
require 'sequel'
require 'sinatra'
DB = Sequel.connect("sqlite://sk.db")
class Sked < Sequel::Model
end
schedule = DB.from(:sked)
get '/' do
@todaymatches = schedule.where(:date => Date.today)
erb :games
end
.erb
<h1>Games</h1>
<p><%= @todaymatches.inspect %></p>
答案 0 :(得分:1)
.where(...)
查询实际上并不检索记录,它们会返回可用于链接更多查询的数据集,例如:
my_posts = DB[:posts].where(:author => 'david').where(:topic => 'ruby') # no records are retrieved
如果您想要实际检索记录,请在最后添加all
:
@todaymatches = schedule.where(:date => Date.today).all # records are retrieved
请参阅:https://sequel.jeremyevans.net/rdoc/classes/Sequel/Dataset.html
答案 1 :(得分:0)
这可能很笨重,但我认为它会做你想要的。给它一个旋转。
.RB
.
.
.
get '/' do
@todaymatches = schedule.where(:date => Date.today)
def print_today_matches
@todaymatches.each { |x| puts x.inspect }
end
erb :games
end
.erb
<h1>Games</h1>
<p><%= print_today_matches %></p>
或者,或者:
.RB
.
.
.
get '/' do
@todaymatches = schedule.where(:date => Date.today)
erb :games
end
.erb
<h1>Games</h1>
<p><%= @todaymatches.each { |x| p x } %></p>