为什么Sequel只返回第一个匹配的行?

时间:2017-03-18 02:17:07

标签: ruby sequel

我有一个名为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>

2 个答案:

答案 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>