Я настоятельно рекомендую прочитать чит-лист Sequel , README , а затем документацию для различных классов. Это чрезвычайно мощный и, на мой взгляд, отличный ORM.
Медитируйте на этом, как на отправную точку для того, чтобы научиться этому. Также будет показан простой, но не самый эффективный способ сделать то, о чем вы спрашиваете:
require 'sequel'
require 'logger'
DB = Sequel.sqlite(loggers: [Logger.new($stdout)])
DB.create_table :fruitbaskets do
primary_key :id
Integer :apple
Integer :orange
Integer :total
end
fruitbaskets = DB[:fruitbaskets]
fruitbaskets.insert(:apple => 1, :orange => 2, :total => 0)
fruit_basket = fruitbaskets.where(:id => 1)
fruit_basket.update(:total => fruit_basket.get([:apple, :orange]).sum)
fruitbaskets.where(:id => 1).get([:apple, :orange, :total]) # => [1, 2, 3]
# >> I, [2019-11-04T19:30:20.524611 #8709] INFO -- : (0.000188s) PRAGMA foreign_keys = 1
# >> I, [2019-11-04T19:30:20.524673 #8709] INFO -- : (0.000013s) PRAGMA case_sensitive_like = 1
# >> I, [2019-11-04T19:30:20.525058 #8709] INFO -- : (0.000228s) CREATE TABLE `fruitbaskets` (`id` integer NOT NULL PRIMARY KEY AUTOINCREMENT, `apple` integer, `orange` integer, `total` integer)
# >> I, [2019-11-04T19:30:20.525212 #8709] INFO -- : (0.000060s) SELECT sqlite_version()
# >> I, [2019-11-04T19:30:20.525331 #8709] INFO -- : (0.000036s) INSERT INTO `fruitbaskets` (`apple`, `orange`, `total`) VALUES (1, 2, 0)
# >> I, [2019-11-04T19:30:20.525477 #8709] INFO -- : (0.000040s) SELECT `apple`, `orange` FROM `fruitbaskets` WHERE (`id` = 1) LIMIT 1
# >> I, [2019-11-04T19:30:20.525558 #8709] INFO -- : (0.000023s) UPDATE `fruitbaskets` SET `total` = 3 WHERE (`id` = 1)
# >> I, [2019-11-04T19:30:20.525669 #8709] INFO -- : (0.000037s) SELECT `apple`, `orange`, `total` FROM `fruitbaskets` WHERE (`id` = 1) LIMIT 1
Примечание:
fruit_basket = fruitbaskets.where(:id => 1)
fruit_basket.update(:total => fruit_basket.get([:apple, :orange]).sum)
Сиквел позволяет нам строить операторы постепенноесли это полезно для нашего кода. Я указываю на запись и затем могу использовать переменную разными способами. Это действительно мощно и описано в документации.