Как обновить или вставить в набор данных Sequel?

Я только начал использовать Sequel в очень маленьком приложении Sinatra. Поскольку у меня есть только одна таблица БД, мне не нужно использовать модели.

Я хочу обновить запись, если она существует, или вставить новую запись, если ее нет. Я придумал следующее решение:

  rec = $nums.where(:number => n, :type => t)
  if $nums.select(1).where(rec.exists)
    rec.update(:counter => :counter + 1)
  else
    $nums.insert(:number => n, :counter => 1, :type => t)
  end

Где $nums— это DB[:numbers]набор данных.

Я считаю, что это не самая элегантная реализация поведения «обновить или вставить».

Как это сделать?

12
задан the Tin Man 26 February 2014 в 04:06
поделиться