Rafael Pereira Alonso
Computer Science student at the Federal University of São Carlos - Sorocaba and Ruby On Rails Teacher
# Mac
$ brew install sqlite
# Linux
$ sudo apt-get install sqlite libsqlite3-dev
-- inicia o SQLite no terminal e armazena tudo num arquivo db.sqlite
$ sqlite3 db.sqlite
---------------------------------------------------------------------
CREATE TABLE 'cart' (
id INTEGER PRIMARY KEY AUTOINCREMENT,
owner VARCHAR,
total FLOAT
);
CREATE TABLE 'product' (
id INTEGER PRIMARY KEY AUTOINCREMENT,
desc VARCHAR,
price FLOAT
);
CREATE TABLE 'cart_item' (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cart_id INTEGER FOREING KEY REFERENCES cart(id),
product_id INTEGER FOREING KEY REFERENCES product(id),
qty INTEGER
);
INSERT INTO 'cart' (owner) VALUES ('Jon Snow');
INSERT INTO 'cart' (owner) VALUES ('Cersei');
INSERT INTO 'product' (desc, price) VALUES ('dragon glass', 20.0);
INSERT INTO 'product' (desc, price) VALUES ('elephants', 250.30);
INSERT INTO 'product' (desc, price) VALUES ('wine', 0.50);
INSERT INTO 'cart_item' (cart_id, product_id, qty) VALUES (1, 1, 100);
INSERT INTO 'cart_item' (cart_id, product_id, qty) VALUES (2, 2, 20);
INSERT INTO 'cart_item' (cart_id, product_id, qty) VALUES (1, 3, 200);
INSERT INTO 'cart_item' (cart_id, product_id, qty) VALUES (2, 3, 700);
-- for better visualization
.headers on
.mode column
SELECT * FROM 'cart'; -- seleciona tudo da tabela 'cart'
SELECT * FROM 'product'; -- seleciona tudo da tabela 'product'
-- Pega o nome do owner (em cart),
-- o nome do produto e o preço (em product)
-- e a quantidade de cada item (em cart_item)
SELECT cart.owner, product.desc, product.price, cart_item.qty FROM 'cart_item'
JOIN 'product' ON product.id = cart_item.product_id
JOIN 'cart' ON cart.id = cart_item.cart_id
WHERE cart.id = 1;
UPDATE 'product' SET price = 1 WHERE desc = 'wine';
UPDATE 'cart' SET owner = 'Tyrion' WHERE id = 1;
UPDATE 'cart_item' SET cart_id = 1 WHERE product_id = 3;
UPDATE 'product' SET price = 1000; -- Oh oh...DELETE FROM 'product' WHERE desc = 'elephants';
DELETE FROM 'cart' WHERE id = 2;
UPDATE 'cart_item'; -- Oh oh...# cada tabela de nosso BD será uma Classe em ruby. Exemplo
# lib/models/cart.rb
class Cart
attr_reader :id, :total
attr_accessor :owner
def initialize(attributes = {})
@id = attributes[:id]
@owner = attributes[:owner]
@total = attributes[:total]
end
end# lib/app.rb
require 'sqlite3' # precisamos disso para usar os comandos SQLite
# vamos importar os arquivos de nossas classes para usarmos aqui
require_relative 'models/cart'
require_relative 'models/product'
require_relative 'models/cart_item'
# inicializamos a constante que irá referenciar nosso BD
# passando o caminho do arquivo onde o mesmo se encontra (relativo
# ao arquivo app.rb
db_path = File.join(File.dirname(__FILE__), "db/shopping.sqlite")
DB = SQLite3::Database.new(db_path)
# Podemos realizar várias consultas dessa maneira
DB.execute("INSERT INTO 'cart' (owner) VALUES ('Cersei')")
# Se tivermos um modelo...
cart = Cart.new(owner: 'Jon Snow')
# ...Podemos interpolá-lo!
DB.execute("INSERT INTO 'cart' (owner) VALUES ('#{cart.owner}')")# lib/app.rb
# ...
rows = DB.execute("SELECT desc, price FROM product")
# => [
# ["dragon glass", 20.0],
# ["elephants", 250.3],
# ["wine", 0.5]
# ]
# Se quisermos mostrar os resultados em hashes
DB.results_as_hash = true
rows = DB.execute("SELECT desc, price FROM product")
# => [
# {"desc"=>"dragon glass", "price"=>20.0},
# {"desc"=>"elephants", "price"=>250.3},
# {"desc"=>"wine", "price"=>0.5}
# ]
By Rafael Pereira Alonso
Quarta Aula (parte 1) da Atividade Complementar de Ruby On Rails, lecionada na Universidade Federal de São Carlos, campus Sorocaba, no primeiro semestre de 2019
Computer Science student at the Federal University of São Carlos - Sorocaba and Ruby On Rails Teacher