Опрос Кассандры в Рельсах по Сиквелу

Я использую 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)    
Другие вопросы по тегам