Sobre Ruby: #{ #{ } #{ } #{ } @voce =  Ruby é uma lingugem de programação como as já existentes no mercado,  ela é interpletada e cross plataforma,  vem sendo muito utilizada para o desenvolvimento web com seu conhecidissimo framework RubyOnRails que faz com  que o desenvolvimento se torne extremamente ágil,  é uma linguagem de scripts, dinamica porém fortemente tipada, que foi desenvolvida por  Yukihiro "Matz" Matsumoto, mas conhecido como"Matz", e teve sua primeira relese 0.95 anunciada em dezembro de 1995. Segundo seu criado, Ruby foi escrita para programadores e não para máquinas e uma outra declaração do Matz é que ele queria uma linguagem de scripts mais poderosa do que Perl e mais orientada a objetos do que Python, por isso decidiu escrever sua própria linguagem de programação que por sua vez é inspirada em outras linguagens como  Perl, Smalltalk, Eiffel, Ada, and Lisp. É completamente orientada a objetos e multiparadigmas de desenvolvimento como funcional, reflectivo e imperativo(programação estruturada). Em sua sintax traz uma similar combinação de  Perl e Python. Atualmente o interpletador padrão da linguagem é o MRI(Matz Ruby Interpreter) ou Ruby MRI, que foi escrita em C, e sendo possivel encontrar opções alternativas com YARV, JRuby, Rubinius, IronRuby, e o MacRuby . Sendo que o  YARV(Yet Another Ruby VM) é o interpretador padrão da versão 1.9.x que esta em desenvolvimento.
Sobre RubyOnRails: #{ #{ } #{ } #{ } @voce =  Ruby on Rails é um  meta-framework  gratuito que promete aumentar velocidade e facilidade no desenvolvimento de sites orientados a banco de dados (database-driven web sites), uma vez que é possível criar aplicações com base em estruturas pré-definidas. Frequentemente referenciado como Rails ou RoR, o Ruby on Rails é um projeto de código aberto escrito na linguagem de programação Ruby. As aplicações criadas utilizando o framework Rails são desenvolvidas com base no padrão de projeto MVC (Model-View-Controller). Ruby on Rails foi uma extração de  David Heinemeier Hansson  de um projeto seu, o gerenciador de projetos  Basecamp . Foi lançado a público pela primeira vez em julho de 2004. DRY DRY (Don't Repeat Yourself, Não se repita) é o conceito por trás da técnica de definir nomes, propriedades e códigos em somente um lugar e reaproveitar essas informações em outros. Convention over configuration Na maioria dos casos, usamos convenções no dia-a-dia da programação, em geral para facilitar o entendimento e manutenção por parte de outros desenvolvedores. Sabendo disso, e sabendo que o tempo gasto para configurar XML em alguns frameworks de outras linguagens é extremamente alto, decidiu-se adotar esse conceito.
...continuação #{ #{ } #{ } #{ } @voce =  Meta-Framework Active Record O Active Record é uma camada de mapeamento objeto-relacional (object-relational mapping layer), responsável pela interoperabilidade entre a aplicação e o banco de dados e pela abstração dos dados. Action Pack Compreende o Action View (geração de visualização de usuário, como HTML, XML, JavaScript, entre outros) e o Action Controller (controle de fluxo de negócio). Action Mailer O Action Mailer é um framework responsável pelo serviço de entrega e até mesmo de recebimento de e-mails. É relativamente pequeno e simples, porém poderoso e capaz de realizar diversas operações apenas com chamadas de entrega de correspondência. Active Support Active Support é uma coleção de várias classes úteis e extensões de bibliotecas padrões, que foram considerados úteis para aplicações em Ruby on Rails.
Cases: #{ #{ } #{ } #{ } @voce =  * BaseCamp * CrunchBase * Github * Hulu * Penny Arcade * Scribd * Spiceworks * Twitter * Urban Dictionary * XING * Yellowpages.com * Slideshare
Instalando o Ruby. sudo apt-get install build-essential sudo apt-get install ruby1.8 ruby1.8-dev rdoc1.8 ri1.8 irb1.8 libopenssl-ruby1.8 wget  http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz tar xvzf rubygems-1.3.5.tgz sudo ruby setup.rb sudo ruby1.8 setup.rb #{ #{ } #{ } #{ } @voce =
Criando link's símbolicos: #{ #{ } #{ } #{ } @voce =  sudo ln -s /usr/bin/ruby1.8 /usr/local/bin/ruby sudo ln -s /usr/bin/gem1.8 /usr/local/bin/gem sudo ln -s /usr/bin/rdoc1.8 /usr/local/bin/rdoc sudo ln -s /usr/bin/ri1.8 /usr/local/bin/ri sudo ln -s /usr/bin/irb1.8 /usr/local/bin/irb ruby -v
Instalando o RubyOnRails #{ #{ } #{ } #{ } @voce =  sudo gem install rails rails -v gedit /home/seu_diretorio_de_usuario/.bashrc PATH=$PATH:/home/seu_diretorio_de_usuario/.gem/ruby/1.8/bin export PATH source /home/seu_diretorio_de_usuario/.bashrc
Criando nossa aplicação: #{ #{ } #{ } #{ } @voce =  rails funcionarios Criação de todos os arquivos da aplicação: create create  app/controllers . . create  log/test.log
Estrutura da nossa aplicação: #{ #{ } #{ } #{ } @voce =  . |-- app |  |-- controllers |  |-- helpers |  |-- models |  `-- views |  `-- layouts |-- config |  |-- environments |  |-- initializers |  `-- locales |-- db |-- doc |-- lib |  `-- tasks |-- log |-- public |  |-- images |  |-- javascripts |  `-- stylesheets |-- script |  `-- performance |-- test |  |-- fixtures |  |-- functional |  |-- integration |  |-- performance |  `-- unit |-- tmp |  |-- cache |  |-- pids |  |-- sessions |  `-- sockets `-- vendor `-- plugins
Os ambientes do arquivo database.yml #{ #{ } #{ } #{ } @voce =  development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000
Criando nossas bases de dados: #{ #{ } #{ } #{ } @voce =  rake db:create rake db:create:all
Executando o WEB Server: #{ #{ } #{ } #{ } @voce =  script/server script/server -p 3001 Trocando o WEBrick pelo mongrel WEBrick 1.3.1 x Mongrel sugo gem install mongrel mongrel_rails -d tail -f log/development.log mongrel_rails mongrel_rails -p 3001 mongrel_rails stop criando nosso promeiro controller
criando nosso promeiro controller e actions: #{ #{ } #{ } #{ } @voce =  script/generate controller home index saudacao app/views/home/index.hmtl.erb: <h1>Esse é o nosso index</h1> <p>Esse é o index da nossa aplicação e aqui vamos ter um link para nosso segunda actions<br> <%= link_to &quot;Vamos para nossa saudação&quot;,:controller => &quot;home&quot;, :action => &quot;saudacao&quot; %> </p> app/views/home/saudacao.hmtl.erb: <h1>Action Saudação</h1> <p>seja bem vindo a saudação do sistema.....</p>
Começando a trabalhar com as rotas: #{ #{ } #{ } #{ } @voce =  Conhecendo o routes.rb config/routes.rb: map.resource :home map.root :controller => &quot;home&quot; rm public/index.html mongrel_rails restart http://localhost:3000
Conhecendo o MVC (Model, View e Controller) #{ #{ } #{ } #{ } @voce =  |-- app |  |-- controllers |  |-- helpers |  |-- models |  `-- views |  `-- layouts
criando nosso primeiro CRUD (Create, Read, Update and Delete) #{ #{ } #{ } #{ } @voce =  script/generate scaffold funcionario nome:string endereco:string bairro:string cidade:string rake db:migrate
Conhecendo nosso arquivo de migration: @voce =  db/migrate/versao_create_funcionarios.rb class CreateFuncionarios < ActiveRecord::Migration def self.up create_table :funcionarios do |t| t.string :nome t.string :endereco t.string :bairro t.string :cidade t.timestamps end end def self.down drop_table :funcionarios end end #{ #{ } #{ } #{ }
Criando nosso template: #{ #{ } #{ } #{ } @voce =  app/views/layouts/application.html.erb: <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /> <title>Application</title> <link rel=&quot;stylesheet&quot; type=&quot;text/css&quot;  href=&quot;application.css&quot; /> </head> <body> <div id=&quot;container&quot;> <div id=&quot;menu&quot;> <%= link_to &quot;Home&quot;, :controller => &quot;home&quot;, :action => &quot;index&quot; %> <%= link_to &quot;Cadastro Funcionario&quot;, :controller => &quot;funcionarios&quot;, :action => &quot;index&quot; %> </div> <div id=&quot;contents&quot;><%= yield %> </div> <div id=&quot;footer&quot;>Todos os direitos reservados.</div> </div> </body> </html>
Executando o cadastro de Funcionário: #{ #{ } #{ } #{ } @voce =  rm app/views/layouts/funcionarios.html.erb abrindo nosso formulario no browser: http://localhost/funcionarios Vamos alterar nosso formulário. Controller e views: app/controllers/funcionarios_controller.rb app/views/funcionarios/new.html.erb app/views/funcionarios/edit.html.erb app/views/funcionarios/show.html.erb app/views/funcionarios/index.html.erb
Criando nosso segundo CRUD: #{ #{ } #{ } #{ } @voce =  script/generate scaffold dependente funcionario_id:integer nome:string rake db:migrate http://localhost:3000/dependentes/index
Criande relacionamentos: #{ #{ } #{ } #{ } @voce =  1º  vamos alterar nosso model de funcionario para dizer que um funcionário possui vários dependentes. app/models/funcionario.rb : class Funcionario < ActiveRecord::Base has_many :dependentes end 2º vamos alterar nosso model de dependentes para dizer que cada dependente pertence a um funcionário. app/models/dependente.rb : class Dependente < ActiveRecord::Base belongs_to :funcionario end
Alterando nosso template: #{ #{ } #{ } #{ } @voce =  rm app/views/layouts/dependentes.html.erb app/views/layouts/application.html.erb: <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /> <title>Application</title> <%= stylesheet_link_tag 'scaffold' %> </head> <body> <div id=&quot;container&quot;> <div id=&quot;menu&quot;> <%= link_to &quot;Home&quot;, :controller => &quot;home&quot;, :action => &quot;index&quot; %> <%= link_to &quot;Cadastro Funcionários&quot;, :controller => &quot;funcionarios&quot;, :action => &quot;index&quot; %> <%= link_to &quot;Cadastro Dependentes&quot;, :controller => &quot;dependentes&quot;, :action => &quot;index&quot; %> </div> <div id=&quot;contents&quot;> <p style=&quot;color: green&quot;><%= flash[:notice] %></p> <%= yield %> </div> <div id=&quot;footer&quot;>Todos os direitos reservados.</div> </div> </body> </html>
Alterando views para relacionar dependente ao funcionário: #{ #{ } #{ } #{ } @voce =  app/views/dependentes/new.html.erb: Trocar: <%= f.text_field :funcionario_id %> Por: <%= f.select :funcionario_id, options_for_select(Funcionario.all.collect{|d| [d.nome, d.id]} ) %> app/views/dependentes/edit.html.erb: Trocar: <%= f.text_field :funcionario_id %> Por: <%= f.select :funcionario_id, &quot;<option value=#{@dependente.funcionario.id}> #{@dependente.funcionario.nome}</option>&quot; << options_for_select(Funcionario.all.collect{|d| [d.nome, d.id]} ) %>
...Continuação #{ #{ } #{ } #{ } @voce =  app/views/dependentes/show.html.erb : Trocar: <%=h @dependente.funcionario_id %> Por: <%=h @dependente.funcionario.nome %> app/views/dependentes/index.html.erb: Trocar: <td><%=h dependente.funcionario_id %></td> Por: <td><%=h dependente.funcionario.nome %></td>
Trabalhando com validations padrões do rails: #{ #{ } #{ } #{ } @voce =  app/models/funcionario.rb Inserir: validates_presence_of :nome app/models/funcionario.rb Trocar: validates_presence_of :nome app/models/funcionario.rb Por: validates_presence_of :nome, :message => &quot;O campo deve ser preenchido...&quot; validates_uniqueness_of :nome, :message => &quot;Já cadastrado anteriormente...&quot;
Criando nossas próprias validations: #{ #{ } #{ } #{ } @voce =  app/models/funcionario.rb Criar o método: def tamanho_nome errors.add(:nome, &quot;Deve ter pelo menos 10 caracteres&quot;) if nome.length < 10 end Inserir a validation: validates_presence_of :nome, :message => &quot;O campo deve ser preenchido...&quot; validates_uniqueness_of :nome, :message => &quot;Já cadastrado anteriormente...&quot; validate :tamanho_nome
The End...... Obrigado a todos..... Thanks for everyone..... #{ #{ } #{ } #{ } @voce =

Mini-curso RubyOnRails CESOL

  • 1.
    Sobre Ruby: #{#{ } #{ } #{ } @voce = Ruby é uma lingugem de programação como as já existentes no mercado, ela é interpletada e cross plataforma, vem sendo muito utilizada para o desenvolvimento web com seu conhecidissimo framework RubyOnRails que faz com que o desenvolvimento se torne extremamente ágil, é uma linguagem de scripts, dinamica porém fortemente tipada, que foi desenvolvida por Yukihiro &quot;Matz&quot; Matsumoto, mas conhecido como&quot;Matz&quot;, e teve sua primeira relese 0.95 anunciada em dezembro de 1995. Segundo seu criado, Ruby foi escrita para programadores e não para máquinas e uma outra declaração do Matz é que ele queria uma linguagem de scripts mais poderosa do que Perl e mais orientada a objetos do que Python, por isso decidiu escrever sua própria linguagem de programação que por sua vez é inspirada em outras linguagens como Perl, Smalltalk, Eiffel, Ada, and Lisp. É completamente orientada a objetos e multiparadigmas de desenvolvimento como funcional, reflectivo e imperativo(programação estruturada). Em sua sintax traz uma similar combinação de Perl e Python. Atualmente o interpletador padrão da linguagem é o MRI(Matz Ruby Interpreter) ou Ruby MRI, que foi escrita em C, e sendo possivel encontrar opções alternativas com YARV, JRuby, Rubinius, IronRuby, e o MacRuby . Sendo que o YARV(Yet Another Ruby VM) é o interpretador padrão da versão 1.9.x que esta em desenvolvimento.
  • 2.
    Sobre RubyOnRails: #{#{ } #{ } #{ } @voce = Ruby on Rails é um meta-framework gratuito que promete aumentar velocidade e facilidade no desenvolvimento de sites orientados a banco de dados (database-driven web sites), uma vez que é possível criar aplicações com base em estruturas pré-definidas. Frequentemente referenciado como Rails ou RoR, o Ruby on Rails é um projeto de código aberto escrito na linguagem de programação Ruby. As aplicações criadas utilizando o framework Rails são desenvolvidas com base no padrão de projeto MVC (Model-View-Controller). Ruby on Rails foi uma extração de David Heinemeier Hansson de um projeto seu, o gerenciador de projetos Basecamp . Foi lançado a público pela primeira vez em julho de 2004. DRY DRY (Don't Repeat Yourself, Não se repita) é o conceito por trás da técnica de definir nomes, propriedades e códigos em somente um lugar e reaproveitar essas informações em outros. Convention over configuration Na maioria dos casos, usamos convenções no dia-a-dia da programação, em geral para facilitar o entendimento e manutenção por parte de outros desenvolvedores. Sabendo disso, e sabendo que o tempo gasto para configurar XML em alguns frameworks de outras linguagens é extremamente alto, decidiu-se adotar esse conceito.
  • 3.
    ...continuação #{ #{} #{ } #{ } @voce = Meta-Framework Active Record O Active Record é uma camada de mapeamento objeto-relacional (object-relational mapping layer), responsável pela interoperabilidade entre a aplicação e o banco de dados e pela abstração dos dados. Action Pack Compreende o Action View (geração de visualização de usuário, como HTML, XML, JavaScript, entre outros) e o Action Controller (controle de fluxo de negócio). Action Mailer O Action Mailer é um framework responsável pelo serviço de entrega e até mesmo de recebimento de e-mails. É relativamente pequeno e simples, porém poderoso e capaz de realizar diversas operações apenas com chamadas de entrega de correspondência. Active Support Active Support é uma coleção de várias classes úteis e extensões de bibliotecas padrões, que foram considerados úteis para aplicações em Ruby on Rails.
  • 4.
    Cases: #{ #{} #{ } #{ } @voce = * BaseCamp * CrunchBase * Github * Hulu * Penny Arcade * Scribd * Spiceworks * Twitter * Urban Dictionary * XING * Yellowpages.com * Slideshare
  • 5.
    Instalando o Ruby.sudo apt-get install build-essential sudo apt-get install ruby1.8 ruby1.8-dev rdoc1.8 ri1.8 irb1.8 libopenssl-ruby1.8 wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz tar xvzf rubygems-1.3.5.tgz sudo ruby setup.rb sudo ruby1.8 setup.rb #{ #{ } #{ } #{ } @voce =
  • 6.
    Criando link's símbolicos:#{ #{ } #{ } #{ } @voce = sudo ln -s /usr/bin/ruby1.8 /usr/local/bin/ruby sudo ln -s /usr/bin/gem1.8 /usr/local/bin/gem sudo ln -s /usr/bin/rdoc1.8 /usr/local/bin/rdoc sudo ln -s /usr/bin/ri1.8 /usr/local/bin/ri sudo ln -s /usr/bin/irb1.8 /usr/local/bin/irb ruby -v
  • 7.
    Instalando o RubyOnRails#{ #{ } #{ } #{ } @voce = sudo gem install rails rails -v gedit /home/seu_diretorio_de_usuario/.bashrc PATH=$PATH:/home/seu_diretorio_de_usuario/.gem/ruby/1.8/bin export PATH source /home/seu_diretorio_de_usuario/.bashrc
  • 8.
    Criando nossa aplicação:#{ #{ } #{ } #{ } @voce = rails funcionarios Criação de todos os arquivos da aplicação: create create app/controllers . . create log/test.log
  • 9.
    Estrutura da nossaaplicação: #{ #{ } #{ } #{ } @voce = . |-- app | |-- controllers | |-- helpers | |-- models | `-- views | `-- layouts |-- config | |-- environments | |-- initializers | `-- locales |-- db |-- doc |-- lib | `-- tasks |-- log |-- public | |-- images | |-- javascripts | `-- stylesheets |-- script | `-- performance |-- test | |-- fixtures | |-- functional | |-- integration | |-- performance | `-- unit |-- tmp | |-- cache | |-- pids | |-- sessions | `-- sockets `-- vendor `-- plugins
  • 10.
    Os ambientes doarquivo database.yml #{ #{ } #{ } #{ } @voce = development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000
  • 11.
    Criando nossas basesde dados: #{ #{ } #{ } #{ } @voce = rake db:create rake db:create:all
  • 12.
    Executando o WEBServer: #{ #{ } #{ } #{ } @voce = script/server script/server -p 3001 Trocando o WEBrick pelo mongrel WEBrick 1.3.1 x Mongrel sugo gem install mongrel mongrel_rails -d tail -f log/development.log mongrel_rails mongrel_rails -p 3001 mongrel_rails stop criando nosso promeiro controller
  • 13.
    criando nosso promeirocontroller e actions: #{ #{ } #{ } #{ } @voce = script/generate controller home index saudacao app/views/home/index.hmtl.erb: <h1>Esse é o nosso index</h1> <p>Esse é o index da nossa aplicação e aqui vamos ter um link para nosso segunda actions<br> <%= link_to &quot;Vamos para nossa saudação&quot;,:controller => &quot;home&quot;, :action => &quot;saudacao&quot; %> </p> app/views/home/saudacao.hmtl.erb: <h1>Action Saudação</h1> <p>seja bem vindo a saudação do sistema.....</p>
  • 14.
    Começando a trabalharcom as rotas: #{ #{ } #{ } #{ } @voce = Conhecendo o routes.rb config/routes.rb: map.resource :home map.root :controller => &quot;home&quot; rm public/index.html mongrel_rails restart http://localhost:3000
  • 15.
    Conhecendo o MVC(Model, View e Controller) #{ #{ } #{ } #{ } @voce = |-- app | |-- controllers | |-- helpers | |-- models | `-- views | `-- layouts
  • 16.
    criando nosso primeiroCRUD (Create, Read, Update and Delete) #{ #{ } #{ } #{ } @voce = script/generate scaffold funcionario nome:string endereco:string bairro:string cidade:string rake db:migrate
  • 17.
    Conhecendo nosso arquivode migration: @voce = db/migrate/versao_create_funcionarios.rb class CreateFuncionarios < ActiveRecord::Migration def self.up create_table :funcionarios do |t| t.string :nome t.string :endereco t.string :bairro t.string :cidade t.timestamps end end def self.down drop_table :funcionarios end end #{ #{ } #{ } #{ }
  • 18.
    Criando nosso template:#{ #{ } #{ } #{ } @voce = app/views/layouts/application.html.erb: <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /> <title>Application</title> <link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;application.css&quot; /> </head> <body> <div id=&quot;container&quot;> <div id=&quot;menu&quot;> <%= link_to &quot;Home&quot;, :controller => &quot;home&quot;, :action => &quot;index&quot; %> <%= link_to &quot;Cadastro Funcionario&quot;, :controller => &quot;funcionarios&quot;, :action => &quot;index&quot; %> </div> <div id=&quot;contents&quot;><%= yield %> </div> <div id=&quot;footer&quot;>Todos os direitos reservados.</div> </div> </body> </html>
  • 19.
    Executando o cadastrode Funcionário: #{ #{ } #{ } #{ } @voce = rm app/views/layouts/funcionarios.html.erb abrindo nosso formulario no browser: http://localhost/funcionarios Vamos alterar nosso formulário. Controller e views: app/controllers/funcionarios_controller.rb app/views/funcionarios/new.html.erb app/views/funcionarios/edit.html.erb app/views/funcionarios/show.html.erb app/views/funcionarios/index.html.erb
  • 20.
    Criando nosso segundoCRUD: #{ #{ } #{ } #{ } @voce = script/generate scaffold dependente funcionario_id:integer nome:string rake db:migrate http://localhost:3000/dependentes/index
  • 21.
    Criande relacionamentos: #{#{ } #{ } #{ } @voce = 1º vamos alterar nosso model de funcionario para dizer que um funcionário possui vários dependentes. app/models/funcionario.rb : class Funcionario < ActiveRecord::Base has_many :dependentes end 2º vamos alterar nosso model de dependentes para dizer que cada dependente pertence a um funcionário. app/models/dependente.rb : class Dependente < ActiveRecord::Base belongs_to :funcionario end
  • 22.
    Alterando nosso template:#{ #{ } #{ } #{ } @voce = rm app/views/layouts/dependentes.html.erb app/views/layouts/application.html.erb: <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;> <head> <meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /> <title>Application</title> <%= stylesheet_link_tag 'scaffold' %> </head> <body> <div id=&quot;container&quot;> <div id=&quot;menu&quot;> <%= link_to &quot;Home&quot;, :controller => &quot;home&quot;, :action => &quot;index&quot; %> <%= link_to &quot;Cadastro Funcionários&quot;, :controller => &quot;funcionarios&quot;, :action => &quot;index&quot; %> <%= link_to &quot;Cadastro Dependentes&quot;, :controller => &quot;dependentes&quot;, :action => &quot;index&quot; %> </div> <div id=&quot;contents&quot;> <p style=&quot;color: green&quot;><%= flash[:notice] %></p> <%= yield %> </div> <div id=&quot;footer&quot;>Todos os direitos reservados.</div> </div> </body> </html>
  • 23.
    Alterando views pararelacionar dependente ao funcionário: #{ #{ } #{ } #{ } @voce = app/views/dependentes/new.html.erb: Trocar: <%= f.text_field :funcionario_id %> Por: <%= f.select :funcionario_id, options_for_select(Funcionario.all.collect{|d| [d.nome, d.id]} ) %> app/views/dependentes/edit.html.erb: Trocar: <%= f.text_field :funcionario_id %> Por: <%= f.select :funcionario_id, &quot;<option value=#{@dependente.funcionario.id}> #{@dependente.funcionario.nome}</option>&quot; << options_for_select(Funcionario.all.collect{|d| [d.nome, d.id]} ) %>
  • 24.
    ...Continuação #{ #{} #{ } #{ } @voce = app/views/dependentes/show.html.erb : Trocar: <%=h @dependente.funcionario_id %> Por: <%=h @dependente.funcionario.nome %> app/views/dependentes/index.html.erb: Trocar: <td><%=h dependente.funcionario_id %></td> Por: <td><%=h dependente.funcionario.nome %></td>
  • 25.
    Trabalhando com validationspadrões do rails: #{ #{ } #{ } #{ } @voce = app/models/funcionario.rb Inserir: validates_presence_of :nome app/models/funcionario.rb Trocar: validates_presence_of :nome app/models/funcionario.rb Por: validates_presence_of :nome, :message => &quot;O campo deve ser preenchido...&quot; validates_uniqueness_of :nome, :message => &quot;Já cadastrado anteriormente...&quot;
  • 26.
    Criando nossas própriasvalidations: #{ #{ } #{ } #{ } @voce = app/models/funcionario.rb Criar o método: def tamanho_nome errors.add(:nome, &quot;Deve ter pelo menos 10 caracteres&quot;) if nome.length < 10 end Inserir a validation: validates_presence_of :nome, :message => &quot;O campo deve ser preenchido...&quot; validates_uniqueness_of :nome, :message => &quot;Já cadastrado anteriormente...&quot; validate :tamanho_nome
  • 27.
    The End...... Obrigadoa todos..... Thanks for everyone..... #{ #{ } #{ } #{ } @voce =