“Um desenvolvedor não é um político, não é um religioso. Fazer afirmações com desconhecimento de
causa é um atestado de ignorância” Fábio Akita.
Repensando a Web com Rails (2006).
Ruby != Rails
A Linguagem Criada pelo japonês Yukihiro Matsumoto ou
“Matz” em 1995;
Dinâmica e interpretada;
Influenciada por Perl, Lips e SmallTalk;
Em Ruby, tudo é objeto;
Todas as classes extend de Object;
A Linguagem
Métodos retornam valor:puts “Hello World” => nil
Operação é método:eql, exists, extend
CaracterísticasTipos básicos:
– Numeric;– String;– Symbol;– Array;– Hash;
VariáveisLocais:
variavel = 1Instanciadas:
@variavel = “Ruby”Classe:
@@classe = Classe (static do Java)Globais:
$variavel = 900
Comparandopublic double soma(double a, double b){
return a+b;}
def soma a,ba+b
end
Instalando o Ruby
Windows:http://rubyforge.org/projects/rubyinstaller
Linux:sudo apt-get install ruby-full
Mac OS:sudo gem update --system
Instalando o Rails
Windows:gem install rails
Linux:sudo gem install rails
Observação:gem install rails –v=3sudo gem install rails –v=2.2.2
Instalando Banco de Dados
WindowsSQlite3: http://www.sqlite.org/download.htmlC:\system32 dll
MySQL: http://dev.mysql.com/downloads/
Linux:sudo apt-get install mysql-server
O framework
Surgiu em 2004, criado por Dave ThomasDRY que significa Don't Repeat Yourself
Scaffold (CRUD)
O framework
Arquitetura M-V-C
O frameworkOu meta-framework
Composto por:
ActiveSupportActiveRecordActionPack
ActionMailerActiveResource
ActiveSupport
Framework que contém coleções de diversas classes;
Extensões de bibliotecas consideradas úteis para uma aplicação em Ruby On
Rails
ActiveRecord
Considerado um framework que contém uma camada de mapeamento objeto-
relacional, entre a aplicação e o banco de dados
ActionPack
Framework HTML, XML, Javascripts, e controle de regras de negócio
ActionMailer
Framework de recebimento de emails, capaz de realizar diversas operações
apenas com chamadas de entregas de correspondência
ActiveResource
RESTful;Em si define um pequeno conjunto de
operações, as mais importantes são POST, GET, PUT e DELETE.
Servidores e Banco de Dados
WEBrickMongrel
Sqlite3MySQLOracle
PostgreSQL
Scripts
About:Informação sobre versão e componentes
Console:Console com o ambiente da aplicação
Dbconsole:Console padrão do banco de dados
Destroy:Remove código gerado
Generate:Gera o código de uma aplicação
Plugin:Instalar/Desinstalar plugins
Runner:Automatizar tarefas da aplicação
ServerInicia o servidor de aplicação
Scripts
Boas Práticas
Boas PráticasConvenções
Modelos gordos
Controllers magros
Nomes de classes em inglês:Ex: Cliente = Customer;
Tabelas são classes no plural:Ex: Classe “Customer” Tabela “customers”
Chave primária é por convenção:Ex: nome_class_id = customers_id
Criando um Projeto
rails new Projeto_Meditec –d mysql
rails new 'nome do projeto' –d (de database) banco de dados
Estrutura Projeto
Estrutura Projetoapp:
Onde fica os Controllers, Telas e Modelos
config:configurações da aplicação, banco, etc
db:guarda as migrações, esquemas e arquivos do banco
doc:documentação
lib:arquivos de biblioteca
log:os logs do servidor rails
public:arquivos externos (css, js, imagens)
Estrutura ProjetoEstrutura ProjetoEstrutura ProjetoEstrutura ProjetoEstrutura Projetoscript:
scripts do rails (rails g, rails s)
test:arquivos de teste unitário, funcional
tmp:arquivos temporários do servidor, informações de sessão, cache,
migrações, esquemas e arquivos do banco
vendor:onde vai os plugins para a app
Gemfile:diretório onde é requerida as gems
Gerando um Controller
rails generate controller Customer index new show edit create update destroy
Gerando um Modelo
rails generate model Customer
Gerando um Scaffold
rails generate scaffold Customer name:string rg:string cpf:string
Relacionamentoshas_many (muitos pra um)
Ex: has_many :contacts
belongs_to (um pra muitos) ou (pertence à)
Ex: belongs_to :customers
has_and_belongs_to_many (muitos p/ muitos)
Ex: has_and_belongs_to_many :products
Ex: has_and_belongs_to_many :characteristics
has_one (um p/ um)
Ex: has_one :contacts
Ex: belongs_to :customers
Migrations
Executadas em sequencial;
Desenvolvedor é responsável;
2 tarefas sempre:
Realizar alteração, ex:
add_column(:customers, :email, :string);
Desfazer alteração, ex:
remove_column(:email);
Rake
Rake db:createComando para criar a base de dados
Rake db:migrateComando para migrar a base de dados
Rake db:destroyComando para destruir a base de dados
Partials
<%= render :partial => "contacts" %>
Form_HelpersAbaixo, uma lista dos FormHelpers disponíveis:
check_box fields_for file_field form_for
hidden_field label
password_field radio_button
text_area text_field
E uma lista dos FormTagHelpers: check_box_tag field_set_tag file_field_tag
form_tag hidden_field_tag
image_submit_tag password_field_tag radio_button_tag
select_tag submit_tag
text_area_tag text_
Link_to
:method => :delete:method => :putMétodos HTTP::confirm => “Tem certeza?”
Select
Datas
<%= f.date_select :data_de_nascimento %>
<%= f.date_select :data_de_nascimento, :start_year => 1970 %>
Validações
validates_presence_ofvalidates_uniqueness_of
validates_format_of :email, :with => /^[\w\d]+$/ :on => :create, :message => "e-mail inválido"
Mensagens de Erro
Form e Form_Builder
<% form_for(@customer) do |f| %> { blocos de código; }
<% end %><% f.fields_for :contacts do |builder| %>
{ blocos de código; }<% end %>
Recomendações
Akita on RailsCarlos Brando => Nome do Jogo
Google Groups => rails-brflails.serviceweb.com
Curiosidades
Agradecimentos
Régis Eduardo Weizenmann [email protected]
https://sites.google.com/site/regiseduardogregol/http://www.r2rails.com.br/