Опрос Кассандры в Рельсах по Сиквелу
Я использую Cequel в Rails. Я хотел бы запросить что-то вроде
Event.where("started_at >?", Time.now)
в ActiveRecord. Но я не знаю, как это сделать в сиквеле.
2 ответа
Чтобы выполнять эффективные запросы диапазона по временной метке, вам нужно сгруппировать события в родительском объекте и использовать 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 инкапсулирует временную метку и может запрашиваться во временных диапазонах- В отличие от ActiveRecord, модель может иметь только один
belongs_to
декларация. Он описывает отношения родитель / ребенок.
Итак, чтобы создать событие, вы должны сделать что-то вроде:
venue.events.new(started_at: Cequel.uuid(started_at), ended_at: ended_at)
Затем запросить диапазон событий по времени начала:
venue.events.after(Time.now)
Обратите внимание, что вы не можете выполнять запросы диапазона по произвольным столбцам - только путем кластеризации столбцов в первичном ключе. Таким образом, вы не можете иметь таблицу, которая разрешает запросы более start_time
а также end_time
, например.
Спасибо, вне времени. Но я нашел решение для запроса, указав диапазон в значении хеша. Ответ
Event.where(started_at: Time.now..Time.now+30.minutes)