2. ruby on rails
índice de conteúdos
introdução
filosofia & arquitectura
models
controllers
views
exemplo prático - loja online
http://www.rubyonrails.org/
2
2
3. = +
ruby on rails
plataforma de desenvolvimento web
:definir => “origem”
tornada pública em 2004 por David Heinemeier Hansson, tendo sido extraída de uma aplicação real
licenciada sob a licença MIT – Software Livre
multi-plataforma (Windows, Linux, MacOS X, *BSD)
:definir => “filosofia”
convenção vem antes da configuração
a plataforma assume determinados prossupostos que facilitam e tornam o processo de desenvolvimento
mais rápido -- no entanto, essas convencções podem ser modificadas
dry - don’t repeat yourself (evite repetições)
opção de desenho que tenta minimizar as repetições de código numa aplicação -- cada conceito deverá estar
expresso num único sítio.
estrutura pré-definida
assume o padrão de desenho model-view-controller e a utilização de uma base de dados através de ORM
também tem uma estrutura de pastas pré-definida, onde cada módulo tem o seu local apropriado
http://www.rubyonrails.org/
3
4. ruby on rails
características principais
:definir => “arquitectura”
model-view-controller
padrão de desenho que divide em três componentes distintos a forma de interagir com uma aplicação
modelo - mantêm o estado da aplicação (tabelas)
view - interface com o utilizador (html, javascript)
controller - recebem eventos do exterior, interagem com o modelo e devolvem output
http://www.rubyonrails.org/
4
4
5. ruby on rails
model, view, controller
:definir => “modelo”
ActiveRecord -- object-relational mapping
padrão de desenho que abstrai as interacções com o modelo de dados, efectuando o mapeamento entre
classes e entidades
‣ zero linhas de código SQL
‣ suporta vários SGBDs (Oracle, SQL Server, MySQL, etc)
‣ cada modelo corresponde tipicamente a uma tabela ou relação entre tabelas
‣ lógica de negócio implementada no modelo e não na base de dados
‣ uma instância da classe é uma linha na tabela
http://www.rubyonrails.org/
5
5
7. ruby on rails
model, view, controller
:definir => “controller”
ActionController
o controlador é o centro lógico da aplicação:
‣ coordena as interacções entre o utilizador, o interface de utilização e o modelo de dados
‣ responsável pela identificação das acções a desempenhar
‣ gere os pedidos HTTP, as sessões, cookies, etc
neste exemplo
‣ o pedido HTTP de origem terá sido do tipo: http://localhost/projectos/
‣ é criado uma variável de instância do controlador, com uma lista de todos os projectos registados na base de dados
‣ uma vez executado o código do método, o controlo é passado à view
http://www.rubyonrails.org/
7
7
8. ruby on rails
model, view, controller
:definir => “view”
ERb - ruby embebido em html
as views são blocos de html com conteúdo dinãmico proviniente de código ruby
‣ ficheiros com pedaços de html/javascript e Ruby -- templates
neste exemplo
‣ o objecto @projectos é o array de instâncias da classe Projecto, devolvido pelo controller
‣ as tags <% %> delimitam código executável que não deve ser traduzido para HTML
‣ as tags <%= %> delimitam código que deve ser ser visualizável
http://www.rubyonrails.org/
8
8
9. ruby on rails
organização
:definir => “estrutra de um projecto”
pastas mais relevantes
‣ app
‣ controllers - controladores
‣ models - modelos
‣ views - views, organizadas por controlador
‣ layouts - views comuns a toda a aplicação
‣ controllerA
‣ controllerB
‣ ...
‣ config - ficheiros de configuração da aplicação
‣ db
‣ migrate - migrações (criação / alteração do modelo de dados)
‣ public - a raíz da aplicação (wwwroot)
‣ images
‣ javascripts
‣ stylesheets
‣ script - vários scripts ruby (gerar código, iniciar servidor web, etc.)
‣ vendor
‣ plugins - plugins adicionais
http://www.rubyonrails.org/
9
9
10. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
gerir os produtos (administração)
1. criar o projecto:
$ rails loja
$ cd loja
2. criar a base de dados:
$ mysqladmin -u root create loja_development
3. criar a tabela e o modelo dos produtos:
$ ruby script/generate model Product
4. alterar a migração gerada:
$ edit db/migrate/001_create_products.rb
5. executar as migrações:
$ rake db:migrate
6. criar o controlador de administraçãõ:
$ ruby script/generate controller admin
7. definir o scaffold no controlador:
$ edit app/controllers/admin_controller.rb
8. executar o servidor web:
http://www.rubyonrails.org/
10
$ ruby script/server
10
11. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
alterações ao modelo de dados e validações
1. criar a migração:
$ ruby script/generate migration add_price
$ edit db/migrate/002_add_price.rb
2. actualizar a base de dados:
$ rake db:migrate
3. alterar o modelo dos produtos e testar:
$ edit app/models/product.rb
$ script/server
http://www.rubyonrails.org/
11
11
12. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
alterar o visual da listagem - #1
1. mudar do scaffold dinâmico para estático:
$ ruby script/generate scaffold product admin
2. criar (copiar?) os ficheiros CSS:
$ edit public/stylesheets/loja.css
3. alterar o recém-criado layout do controlador:
$ edit app/views/layouts/admin.rhtml
http://www.rubyonrails.org/
12
12
13. alterar o visual da listagem - #2
ruby on rails
exemplo real 4. alterar o template que mostra a listagem:
$ edit app/views/admin/list.rhtml
http://www.rubyonrails.org/
13
13
14. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
criação da página principal
1. criar o controlador da loja:
$ ruby script/generate controller store index
2. alterar o controlador da loja:
$ edit app/controllers/store_controller.rb
3. alterar o template do método index:
$ edit app/views/store/index.rhtml
4. alterar o layout da página:
$ edit app/views/layouts/store.rhtml
http://www.rubyonrails.org/
14
14
15. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
carrinho de compras - #1
1. criar os modelos do carrinho:
$ edit app/models/carb.rb
$ edit app/models/cart_item.rb
http://www.rubyonrails.org/
15
15
16. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
carrinho de compras - #2
2. alterar o controlador da loja:
$ edit app/controllers/store_controller.rb
3. criar a view do carrinho:
$ edit app/views/store/add_to_cart.rhtml
http://www.rubyonrails.org/
16
16
17. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
guardar encomendas - #1
1. criar novos modelos:
$ ruby script/generate model Order
$ ruby script/generate model LineItem
2. alterar as respectivas migrações:
$ edit db/migrate/004_create_orders.rb
$ edit db/migrate/005_create_line_items.rb
3. actualizar esquema de dados:
$ rake db:migrate
http://www.rubyonrails.org/
17
17
18. ruby on rails
exemplo real
:definir => “catálogo de produtos online”
guardar encomendas - #2
4. alterar os modelos gerados:
$ edit app/models/order.rb
$ edit app/models/line_item.rb
5. alterar o controlador da loja:
$ edit app/controllers/store_controller.rb
http://www.rubyonrails.org/
18
18
19. ruby on rails
exemplo real
guardar encomendas - #3
6. alterar a view do carrinho:
:definir => “catálogo de produtos online”
$ edit app/views/store/add_to_cart.rhtml
7. criar a view do método ‘checkout’:
$ edit app/views/store/checkout.rhtml
http://www.rubyonrails.org/
19
19