我在Rails中使用Cequel。我想查询类似
的内容Event.where("started_at >?", Time.now)
在ActiveRecord中。但是我不知道如何在续集中这样做。
答案 0 :(得分:1)
为了在时间戳上执行有效的范围查询,您需要在父对象下对事件进行分组,并使用started_at
作为您的群集列(主键中的最后一列) 。因此,举例来说,如果事件属于场地,您可能会设置如下内容:
class Venue
include Cequel::Record
key :id, :uuid, auto: true
column :name, :text
has_many :events
end
class Event
include Cequel::Record
belongs_to :venue
key :started_at, :timeuuid
column :ended_at, :timestamp
column :title, :text
end
这意味着您可以在开始时间范围内有效地执行查询。有几点需要注意:
started_at
键是一个TimeUUID,用于确保唯一性。 TimeUUID封装了一个时间戳,可以在时间范围内查询belongs_to
声明。它描述了父/子关系。因此,要创建一个活动,您可以执行以下操作:
venue.events.new(started_at: Cequel.uuid(started_at), ended_at: ended_at)
然后按开始时间查询一系列事件:
venue.events.after(Time.now)
请注意,您不能通过任意列进行范围查询 - 仅通过对主键中的列进行聚类。因此,您无法拥有一个允许start_time
和 end_time
进行查询的表格。
答案 1 :(得分:1)
谢谢你的时间。但我通过提供哈希值范围找到了查询的解决方案。 答案是
Event.where(started_at: Time.now..Time.now+30.minutes)