Ruby On Rails

  • View
    1.915

  • Download
    1

Embed Size (px)

Text of Ruby On Rails

  • 1. ConhecendoRubyonRails Conhecendo Ruby on Rails JevPauloCsarM.Jeveauxwww.jeveaux.comj

2. JevJ Consultor eArquiteto Java Desenvolvedor Java h 7 anos Javah 7anos Administrador doPortalJava eESJUG PalestranteEntusiastaEvangelistaJavae agoratambm Rails=) 3. AgendaAd AlinguagemRuby RubyonRails Oexemplo:Blog O exemplo: Blog Scaffold Testes Ajax Comocontinuaresabermais C ti b i 4. Ruby Rb Linguagem deprogramao OpenSource Orientada aobjetos j Linguagem de scripts dinmica e interpretada descriptsdinmica einterpretada Criada por YukihiromatzMatsumotoem 1993 d kh edisponibilizada ao pblico em 1995 5. Ruby Rb Interpretada Fedbackimediatonodesenvolvimento Perde um pouco em performance Perdeumpoucoemperformance Totalmenteorientadaaobjetos T d Tudoumobjetobj t 5umainstnciadaclasseFixnum Classes,herana,mtodos,closures,etc 6. ScriptDinmicoeInterpretadoS i t Di iIttd PossibilidadederealizarchamadasaoSistema Operacionaldiretamente O i l di tt PoderosasoperaescomstringseExpresses Regulares Feedback imediato no desenvolvimento Feedbackimediatonodesenvolvimento 7. RpidaeFcilR id F il Nonecessriodeclararvariveis Variveis no tem tipo (no so tipadas) Variveisnotemtipo(noso tipadas ) Asintaxesimpleseconsistente; Agestodememriaautomtica GarbageCollector 8. Comesemtipagem C ti Variveisnopossuemtipagemesttica (comoemSmalltalkePython) (S llt lk P th ) Dadosfortementetipados Odadoemmemriatipadoechecadoem tempodeexecuo(Runtime) tempo de execuo (Runtime) 9. Multiencadeada M ltidd Multiencadeamentoaimplementaode multitarefadentrodeumnicoprocesso ltit f d t d i Execuomaislenta Osrecursossocompartilhadosemmemriae devemteroacessosincronizado d ti id Vriastarefasexecutamdeformaconcorrente OmultiencadementodoRubyimplementadono prpriointerpretador prprio interpretador 10. RubyonRails RbR il FrameworkparadesenvolvimentodeaplicaesWeb; CriadocomalinguagemRuby; DesenvolvidoporDavidHeinemeier Hansson,da 37signals; Extradodeumprodutoreal:oBasecamp Deumprodutorealparaummundoreal 11. OqueRails?O R il ? Frameworkcompleto paradesenvolvimentodeaplicativos Web PacoteMVC(ModelViewController) Action Pack(Action Controller eAction View) Active Record Suporteaenvioerecebimentodeemails A ti M ilAction Mailer Suporte a Web Services SuporteaWebServices Action WebServices 12. ArquiteturaRails A it tR il 13. Comeando Cd InstalarRuby1.8.6 www ruby lang org/en/downloadswww.rubylang.org/en/downloads InstalarRubyGems rubyforge.org/frs/?group_id=126 I t l R il (li h d InstalarRails(linhadecomando) d) gem install rails Instalar MySQL (suporta outros bancos) InstalarMySQL(suportaoutrosbancos) dev.mysql.com/downloads 14. ComeoFcil CF il Windows I t t R il InstantRails wiki.rubyonrails.com/rails/pages/InstantRails Mac e Linux MaceLinux FiveRunsRBInstall www.fiveruns.com/products/rm/installfi/ d t / /i t ll Linux sudo apt get install ruby irb rdocapt-get 15. Oexemplo Ol SistemadeBlog Baseadonoexemplodoblogdoscreencastde DavidHanssonnorubyonrails.org.Oexemplose chama:Creatingaweblogin15minutes http://media.rubyonrails.org/video/rails_take2_with_sound.mov p // yg/ / 16. OqueoblogterO bl t UmatabeladePosts UmatabelaassociadadeComments UmateladelistagemdePosts Uma tela de listagem de Posts UmateladecriaoeediodePosts UmateladedetalhesdoPost NodetalhedoPost veremoseadicionaremos Comments 17. Criandooprojeto Ci d jt rails rails blog 18. CriandoobancodedadosCi db d dd CriandoobancodedadosnoMySQL create ddatabase _bjbi 19. AmbientesA bi t Railsvempreparadoparalidarcomtrs ambientesdiferentes:bi t dift Development (sandbox) Test (testes unitrios funcionais integrados)(testesunitrios,funcionais,integrados) Production (produo) 20. Aaplicaocriada A li id Estruturadediretrios 21. Configurando C fid Configuraomnimanecessria:Bancode dados! dd ! 22. CriandooController Ci dC t ll script/generatecontroller script/generate controller Blog / 23. ControllerseActionsC t llA ti TodoControllerficanodiretrio: /app/controllers/ controller.rb/app/controllers/_controller.rb Todo Controller herda a classe ApplicationController TodoControllerherdaaclasseApplicationController TodoaplicativoRailscriadocomumaclassechamada ApplicationController,queherdadeActionController::Base,e basedetodososoutroscontrollers TodomtododeumcontrollerchamadodeAction 24. CriandoumActionCi d A ti UmaclasseControllerpodetervriasActions.def index#ffaca alguma coisal irender => :text HelloWorld!end 25. Executandoaaplicao Etdli Execute script/server / Ir iniciar oservidor detestespadro,WEBRick na p ,porta 3000. Acesse: http://localhost:3000Acesse:http://localhost:3000 26. Executando Etd 27. RoteamentoRtt Comoacessar oControllereActioncriados? Roteamento customizvel:config/routes.rb http://localhost:3000/:controller/:action/:id 28. Roteamento Rtt 29. ExecutandoumaAction EtdA ti Seguindoaregraanteriorderoteamento http://localhost:3000/blog/index blog=app/controller/blog_controller.rb index=mtodoindexemBlogController 30. ConvenesecomportamentoC tt AofinaldetodaAction,Railschamarumaviewcom omesmonomedaAction,noseguintediretrio: o mesmo nome da Action no seguinte diretrio: /app/views//. Aextensodoarquivopodeser: q p .rhtml EmbeddedRuby(HTML+Ruby) .rxml XMLBuilder(Rubypuro) (yp ) .rjs JavascriptGenerator(Rubypuro) Estefluxopodeserinterrompidocomumachamada explcitaaomtodorenderouredirect_to 31. CriandoumaViewCi dVi Criarindex.rhtmlem/app/views/blog/HelloWorld! (view) Comentaralinhacomorendernomtodo indexdoBlogController Acesse novamente e comprove Acessenovamenteecomprove http://localhost:3000/blog/index 32. Criando C i d uma Vi View 33. Criando C i d uma Vi View 34. Criando C i d uma Vi View 35. CriandoaentidadePostCi dtid d P t script/generatemodel script/generate model Post / 36. MantendosempreaordemMtd d Migration ManutenodetabelasusandoRuby Independente de banco Independentedebanco TambmsuportaSQLnativo 37. Rake Rk Rakeaferramentaparaexecuodetarefas implementadasemRuby.RakeoMakepara iltd Rb Rk Mk Rubyy Primeiratarefa:manutenodastabelas rake migrate 38. rakemigratekit Todaentidadecriadacomscript/generate geraumarquivode Migrationnodiretriodb/migrate Migration no diretrio db/migrate Todo arquivo Migration numerado: TodoarquivoMigrationnumerado: 001_create_posts.rb Ocomandorakemigrateexecutaosarquivosemdb/migrate Ogerenciamentodobancodedadosfeitototalmenteem Ruby 39. MapeandoastabelasM d tbl AclassePost jcapazdegerenciarosdadosda tabelanobancodedados tabela no banco de dados ActiveRecord Nohnecessidadedeexplicitaromapeamentodas colunasdobancocomatributosdaclasse Rails noprobenada:sefornecessrioexistecomo mapearumacolunaparaoutroatributodenome mapear uma coluna para outro atributo de nome diferente 40. Maisconvenes Mi Todaentidadecriadanodiretriopadro: /app/models//.rbpp Todaentidadeherdadiretamentedaclasse ActiveRecord::Base Noprecisomapearmanualmenteascolunasdatabela Conveno:aclassetemonomenosingular(Post),atabela temonomedoplural(posts)p(p ) Conveno: Surrogate Key, toda tabela tem uma chave Conveno:SurrogateKey,todatabelatemumachave primriachamadaidqueumnmeroautoincrementvel 41. AnotandoosModelosAtd Mdl PlugindeDaveThomas Instalao(viainternet): script/plugin install annotate_models Utilizao(viarake): rake annotate_models L a tabela do banco de dados e coloca um Latabeladobancodedadosecolocaum cabealhocomocomentrionaclasseentidade 42. ScaffoldS ff ld Colocaromtodoscaffold:nocontroller suficiente TelasCRUD(Create,Read,Update,Delete)geradas automaticamenteemtempodeexecuo(runtime) automaticamente em tempo de execuo (runtime) CUIDADO:RailsNO Scaffold Scaffoldapenasumapequenafuncionalidadepara facilitarprototipao fl 43. TelascomScaffold TlS ff ld 44. TelascomScaffold TlS ff ld 45. TelascomScaffold TlS ff ld 46. ConfigurandooPostC fidPt Acrecentandoumavalidao validate_presence_of :title 47. Testandovalidao Ttdlid 48. MelhorandooPostM lhdPt CriandonovascolunascomMigration script/generatemigration script/generate migration AdicionarColunasPost pgg 49. Melhorando oPost M lhdPt 50. Melhorando oPost M lhdPt 51. CriandoumnovoPostCi dPt Testandosemreiniciar Verifiqueasnovascolunas 52. CriandoumnovoPostCi dPt Testandosemreiniciar Verifiqueasnovascolunas 53. GerandooScaffoldGdS ff ld script/generatescaffold script/generatescaffoldPostBlog 54. Scaffoldgerado!S ff ldd! Todaexecuoqueeraautomticaagoraest expostaemarquivosquepodemoseditart i ddit comoquisermos q Provado:RailsnoserestringeaScaffold automtico Podemos mudar a listagem de Posts por PodemosmudaralistagemdePosts,por exemplo,em: /app/views/blog/list.rhtml 55. Arquivos gerados Ai d 56. Arquivos gerados Ai d 57. Arquivos gerados Ai d 58. CriandoaentidadeComment Ci dtid d Ct Hora decriar aentidade Comment script/generate model Comment / Lembrese: esta entidade ser associada a um Lembre se:esta aum Post 59. Rake:OrganizandonovamenteRk O idt CommentpertenceaPostatravsdacoluna post_id.t id Conveno de Chave Estrangeira: id ConvenodeChaveEstrangeira:_id rake migrate 60. Rake:Organizandonovamente Rk O idt 61. Rake:Organizandonovamente Rk O idt 62. Criandoasassociaes Ci di NaclassePost has_many :comments NaclasseComments belongs_to :post 63. Criandoasassociaes Ci di 64. Criandoasassociaes Ci di 65. Usandoasassociaes Ud i CriarumformulriodeCommentnatelade detalhedeumPost d t lh dPt /app/views/blog/show.rhtml / pp/ / g/ 66. PartialsP ti l DontRepeatYourself(DRY) Uma das maneiras de separar trechos de cdigodasmaneiras deseparar decdigo Todapartialcomea comunderline_ quot;commentquot;,:collection=> dlquot;quot; ll@post.comments %> Associao has_many em Postautomaticamente fornece um hashchamado comments (nome da outra entidade noplural) 67. ActionparaCommentA tiC t {:action => 'add comment'