我有一个数据库,我试图在一定范围内找到数据并满足某些标准。我使用以下命令:
GameSlot.where("s = ? and st >= :start_date and et <= :end_date", 5, {start_date: '2016-01-01', end_date: '2017-01-01'})
当我执行时,我回来了:
ArgumentError:参数数量错误(3为0..1)
我是Ruby on Rails的新手,所以感谢任何帮助。
编辑:&#34; s&#34;的数据类型是整数,&#34; st&#34;和&#34; et&#34;是时候了,但我只对约会感兴趣。
答案 0 :(得分:3)
应该更像这样,我想:
GameSlot.where(["s = :s and st >= :start_date and et <= :end_date",
s: 5,
start_date: '2016-01-01',
end_date: '2017-01-01'])
注意where
这里只有一个参数,一个数组。
QueryMethods#where上的文档。
答案 1 :(得分:2)
我猜你正在寻找这样的东西:
GameSlot.where("s = ? and st >= ? and et <= ?", 5, '2016-01-01', '2017-01-01')
答案 2 :(得分:1)
作为替代方法,您可以考虑类方法(或范围,如果您喜欢这种事情)。类似的东西:
class GameSlot < ActiveRecord::Base
class << self
def s(val) where(s: val) end
def starting_on_or_after(date) where('st >= ?', date) end
def ending_on_or_before(date) where('et <= ?', date) end
end
end
然后你可以这样做:
GameSlot.s(5).starting_on_or_after('2016-01-01').ending_on_or_before('2017-01-01')
这样,你就可以将查询逻辑保留在GameSlot
模型中,这对我来说似乎有点好了。
要咀嚼的东西。