RubyOnRails_inleiding.ppt - Informatica Blok 2 docent: Kris.Aerts ...

504 views

Published on

  • Be the first to comment

  • Be the first to like this

RubyOnRails_inleiding.ppt - Informatica Blok 2 docent: Kris.Aerts ...

  1. 1. Kris.Aerts@khlim.beKris.Aerts@khlim.be 11 Het MVC-frameworkHet MVC-framework Ruby on RailsRuby on Rails Ietwat beschouwend enIetwat beschouwend en hands-on tegelijkhands-on tegelijk
  2. 2. WebTaVe 2007-’08Ruby On RailsRuby On Rails OverzichtOverzicht  Klein woordje over de omgevingKlein woordje over de omgeving  Belangrijkste principesBelangrijkste principes  Snelle test : DepotSnelle test : Depot http://pragprog.com/titles/rails2http://pragprog.com/titles/rails2  Principes concreter gemaaktPrincipes concreter gemaakt  Traditionele tutorial van “10 minuten”Traditionele tutorial van “10 minuten”  Geavanceerdere dingenGeavanceerdere dingen  afsprakensysteemafsprakensysteem
  3. 3. WebTaVe 2007-’08Ruby On RailsRuby On Rails Omgeving: netbeans 6.1Omgeving: netbeans 6.1  Eerst Ruby installeren viaEerst Ruby installeren via http://http://www.rubyonrails.orgwww.rubyonrails.org/down/down  Meer info over Ruby on Rails:Meer info over Ruby on Rails: http://http://www.rubyonrails.orgwww.rubyonrails.org//  Netbeans zelfNetbeans zelf http://bits.netbeans.org/download/trunk/nightly/latest/http://bits.netbeans.org/download/trunk/nightly/latest/  Voor Mac en Windows zélfde omgeving!!Voor Mac en Windows zélfde omgeving!!  Kies IDE met ondersteuning voor RubyKies IDE met ondersteuning voor Ruby  Alleen ruby support als weinig geheugen (heb ik sowieso gedaan)Alleen ruby support als weinig geheugen (heb ik sowieso gedaan)  Zorg ook voor localhost met mysqlZorg ook voor localhost met mysql  http://www.xampp.orghttp://www.xampp.org  Eventueel in config.inc.php auth_type veranderen naar httpEventueel in config.inc.php auth_type veranderen naar http  Bookmark http://www.netbeans.org/kb/trails/ruby.htmlBookmark http://www.netbeans.org/kb/trails/ruby.html  http://http://lifeonrails.orglifeonrails.org/2007/8/30//2007/8/30/netbeans-the-best-ruby-on-rails-idenetbeans-the-best-ruby-on-rails-ide  Alternatieven: InstantRails voor Windows, Locomotive voor MacAlternatieven: InstantRails voor Windows, Locomotive voor Mac
  4. 4. WebTaVe 2007-’08Ruby On RailsRuby On Rails Rails upgraden naar 2.0.2Rails upgraden naar 2.0.2  Kies “File”Kies “File”  “New project”“New project”  rechts “Ruby On Rails Application”rechts “Ruby On Rails Application”  Klik “Next”Klik “Next”  Selecteer onderaan het Ruby-platform “Ruby 1.8.6”Selecteer onderaan het Ruby-platform “Ruby 1.8.6”  Als het er niet bij staat -> manage platformsAls het er niet bij staat -> manage platforms  add platform, selecteer ruby.exe in de map ruby/binadd platform, selecteer ruby.exe in de map ruby/bin  Nog eens “Next”Nog eens “Next”  Dan bovenaan “Install Rails”Dan bovenaan “Install Rails”  Op naar versie 2.0.2Op naar versie 2.0.2  Duurt wel efkes!Duurt wel efkes!  En dan “Finish”En dan “Finish”  De eerste keer wordt Ruby en Instant Rails ook nog helemaalDe eerste keer wordt Ruby en Instant Rails ook nog helemaal geindexeerd voor gebruik in de omgeving.geindexeerd voor gebruik in de omgeving.
  5. 5. WebTaVe 2007-’08Ruby On RailsRuby On Rails BelangrijkBelangrijk Design PatternDesign Pattern : MVC: MVC ModelModel ViewView ControllerController cfr. invoer – verwerking - uitvoer
  6. 6. WebTaVe 2007-’08Ruby On RailsRuby On Rails MVC volgens RailsMVC volgens Rails  Model is direct gekoppeld aan database (per tabel een model)Model is direct gekoppeld aan database (per tabel een model)  Grotendeels automatisch gegenereerdGrotendeels automatisch gegenereerd  View is de webpaginaView is de webpagina  .html.erb = html met klein beetje Ruby.html.erb = html met klein beetje Ruby  Controller vertaalt requests van view in acties op databaseController vertaalt requests van view in acties op database  Directe mapping tussen methodenaam en ‘bestand’ van de viewDirecte mapping tussen methodenaam en ‘bestand’ van de view
  7. 7. WebTaVe 2007-’08Ruby On RailsRuby On Rails Doordacht frameworkDoordacht framework  Development – Testing – DeploymentDevelopment – Testing – Deployment  Zijn verschillende fasesZijn verschillende fases  Belang wordt nogal eens onderschatBelang wordt nogal eens onderschat  Hier mooi ingebakkenHier mooi ingebakken  Aparte databases!Aparte databases!  Migratie tussen versiesMigratie tussen versies  Ondersteuning van EROndersteuning van ER  Declaratief : meer “wat” dan “hoe”Declaratief : meer “wat” dan “hoe”  ‘‘validatie’ van veldenvalidatie’ van velden  Opstellen van een formulierOpstellen van een formulier  Abstractie van SQL (~~)Abstractie van SQL (~~)  Mooie actie-gebaseerde URL’sMooie actie-gebaseerde URL’s
  8. 8. WebTaVe 2007-’08Ruby On RailsRuby On Rails GeautomatiseerdGeautomatiseerd  OO: Getters & settersOO: Getters & setters  database : CRUDdatabase : CRUD  Create, Read, Update and DeleteCreate, Read, Update and Delete  Rake (Ruby Make): neemt repetitief werk overRake (Ruby Make): neemt repetitief werk over  Code-generatie : scaffoldingCode-generatie : scaffolding  In rails 1.2.5 blijft die ‘automatisch’ up to dateIn rails 1.2.5 blijft die ‘automatisch’ up to date  In rails 2 is die code een vertrekbasisIn rails 2 is die code een vertrekbasis  Niet automatisch up 2 dateNiet automatisch up 2 date  Minder parameters (dus meer default gedrag)Minder parameters (dus meer default gedrag)  Maar wel meer (betere) controle voor ontwikkelaarMaar wel meer (betere) controle voor ontwikkelaar
  9. 9. WebTaVe 2007-’08Ruby On RailsRuby On Rails Belangrijkste verandering in 2.0Belangrijkste verandering in 2.0  Traditionele scaffolding is weg!Traditionele scaffolding is weg!  Dus meeste tutorials van 1.2 werken niet!Dus meeste tutorials van 1.2 werken niet!  Korte uitlegKorte uitleg http://davidlynch.org/blog/2008/01/rails-20-scaffolding/http://davidlynch.org/blog/2008/01/rails-20-scaffolding/  Langer http://luthdev.blogspot.com/2008/01/ruby-on-rails-2-Langer http://luthdev.blogspot.com/2008/01/ruby-on-rails-2- activescaffold-and.htmlactivescaffold-and.html  Komt sebiet sowieso aan bodKomt sebiet sowieso aan bod
  10. 10. WebTaVe 2007-’08Ruby On RailsRuby On Rails Depot Snelle TestDepot Snelle Test  New ProjectNew Project  SamplesSamples  Rechtermuis -> Set Configuration -> custom -> Ruby 1.8.6Rechtermuis -> Set Configuration -> custom -> Ruby 1.8.6  Voor Rails 2: verander in ConfigurationVoor Rails 2: verander in Configurationboot.rbboot.rb  Regel 55 en 65: vervang require_gem “rails.. door gem “rails..Regel 55 en 65: vervang require_gem “rails.. door gem “rails..  Maak database voor user mét paswoord (bv. ror – ror)Maak database voor user mét paswoord (bv. ror – ror)  Manueel met phpmyadminManueel met phpmyadmin  Sla deze gebruiker op in Configuration – database.ymLSla deze gebruiker op in Configuration – database.ymL  Tabellen creeren : Migrate database to current versionTabellen creeren : Migrate database to current version  Applicatie uitvoeren : rechtermuistoetsApplicatie uitvoeren : rechtermuistoets  RunRun  Test in je browser http://localhost:3000Test in je browser http://localhost:3000  ScreencastScreencast http://www.rubyplus.org/episodes/19-AWDR-Depot-App-using-Rails-2-http://www.rubyplus.org/episodes/19-AWDR-Depot-App-using-Rails-2- version.htmlversion.html
  11. 11. WebTaVe 2007-’08Ruby On RailsRuby On Rails Rails 2.0 weblog in 10 minutenRails 2.0 weblog in 10 minuten http://blogs.sun.com/divas/entry/creating_a_rails_2_0http://blogs.sun.com/divas/entry/creating_a_rails_2_0 Voorbereidend werkVoorbereidend werk  Stap 0: maak ER-schemaStap 0: maak ER-schema  Stap 1: creeer applicatieStap 1: creeer applicatie  Stap 2: pas database.yml aanStap 2: pas database.yml aan  Stap 3: creeer dbStap 3: creeer db  ““Run Rake Task > db > createRun Rake Task > db > create ””
  12. 12. WebTaVe 2007-’08Ruby On RailsRuby On Rails scaffold CRUDscaffold CRUD  Stap 4: creeer mini-applicatieStap 4: creeer mini-applicatie (CRUD van één tabel uit ER)(CRUD van één tabel uit ER)  Generate -> scaffoldGenerate -> scaffold  Maakt Model – View – ControllerMaakt Model – View – Controller  Veel feedback in het Output vensterVeel feedback in het Output venster  Stap 5: pas database aan (maak tabel van model)Stap 5: pas database aan (maak tabel van model)  Migrate databaseMigrate database
  13. 13. WebTaVe 2007-’08Ruby On RailsRuby On Rails Kijk even naar databaseKijk even naar database  title:stringtitle:string  attribuut title, type varchar(255)attribuut title, type varchar(255)  idid  int, autoincrementint, autoincrement  Altijd bij Rails modelAltijd bij Rails model  Extra velden maken kan analoogExtra velden maken kan analoog  Bij scaffold opsomming zonder komma’sBij scaffold opsomming zonder komma’s
  14. 14. WebTaVe 2007-’08Ruby On RailsRuby On Rails Hoe?Hoe?  scaffold maakt ruby bestanden inscaffold maakt ruby bestanden in Database Migrations/migrate/…Database Migrations/migrate/…  up & down methodes om tabel te makenup & down methodes om tabel te maken en te verwijderenen te verwijderen  Zet t.timestamps in commentaar #Zet t.timestamps in commentaar #  Migrate databaseMigrate database  Eerst version 0 (drop)Eerst version 0 (drop)  Dan version 1Dan version 1
  15. 15. WebTaVe 2007-’08Ruby On RailsRuby On Rails AfsprakenAfspraken i.v.m. naamgevingi.v.m. naamgeving  Model is enkelvoud (post)Model is enkelvoud (post)  elk object van het type model bevat 1 modelelk object van het type model bevat 1 model  Tabel is meervoud (posts)Tabel is meervoud (posts)  Want tabel bevat verschillende postsWant tabel bevat verschillende posts  Ruby-tag <% %>Ruby-tag <% %>
  16. 16. WebTaVe 2007-’08Ruby On RailsRuby On Rails Klaar is kees?Klaar is kees? Stap 6: kijk even in http://localhost:3000Stap 6: kijk even in http://localhost:3000  Nog niet veel te zienNog niet veel te zien  Ziet er zo standaard uitZiet er zo standaard uit  Kijk wel eens bij “About your applicationsKijk wel eens bij “About your applications environment”environment”  ‘‘t Is echt jouw applicatie!t Is echt jouw applicatie!  Probleem: geen basis-actie gedefinieerd inProbleem: geen basis-actie gedefinieerd in config/routes.rbconfig/routes.rb  => mooie URL’s=> mooie URL’s
  17. 17. WebTaVe 2007-’08Ruby On RailsRuby On Rails ““homepagina” makenhomepagina” maken  In het project, open het mapje “public” enIn het project, open het mapje “public” en verwijder index.htmlverwijder index.html  Kijk opnieuw in http://localhost:3000Kijk opnieuw in http://localhost:3000  Routing error (da’s goed. index.html is weg!)Routing error (da’s goed. index.html is weg!)  Nieuwe route instellen in config/routes.rbNieuwe route instellen in config/routes.rb  En zie daar: een ‘volledige’ applicatie!En zie daar: een ‘volledige’ applicatie!
  18. 18. WebTaVe 2007-’08Ruby On RailsRuby On Rails Let even op de urlsLet even op de urls  http://localhost:3001/postshttp://localhost:3001/posts  http://localhost:3001/posts/newhttp://localhost:3001/posts/new  http://localhost:3001/posts/1http://localhost:3001/posts/1  http://localhost:3001/posts/1/edithttp://localhost:3001/posts/1/edit
  19. 19. WebTaVe 2007-’08Ruby On RailsRuby On Rails AfsprakenAfspraken i.v.m. naamgevingi.v.m. naamgeving  Model is enkelvoud (post)Model is enkelvoud (post)  Models/post.rbModels/post.rb  Tabel is meervoud (posts)Tabel is meervoud (posts)  Controller is ook meervoud (posts)Controller is ook meervoud (posts)  Want toont lijst van postsWant toont lijst van posts  Eigenlijk Controllers/posts_controller.rbEigenlijk Controllers/posts_controller.rb
  20. 20. WebTaVe 2007-’08Ruby On RailsRuby On Rails Database aanpassenDatabase aanpassen  Niet rechtstreeks prutsen in 001_create_posts.rbNiet rechtstreeks prutsen in 001_create_posts.rb  Want ongedocumenteerd, en moeilijke roll backWant ongedocumenteerd, en moeilijke roll back  Wel via Rails zelfWel via Rails zelf  Naam in CamelCase,Naam in CamelCase, en moet eindigen met tabelnaamen moet eindigen met tabelnaam (met hoofdletter)(met hoofdletter)  Gevolgd door attributen van tabelGevolgd door attributen van tabel  Wordt vertaald naar add_body_to_posts.rbWordt vertaald naar add_body_to_posts.rb  Migrate Database …Migrate Database …  Of open bronbestand en rechterklik “Run” in editorOf open bronbestand en rechterklik “Run” in editor
  21. 21. WebTaVe 2007-’08Ruby On RailsRuby On Rails View & Controller aanpassenView & Controller aanpassen  Ofwel zelfOfwel zelf  De aangeraden methodeDe aangeraden methode  Ofwel nieuwe scaffoldOfwel nieuwe scaffold  GenerateGenerate  scaffoldscaffold  postpost  title:string body:text --skip-migrationtitle:string body:text --skip-migration  + overwrite aanduiden+ overwrite aanduiden  Test en zie dat het werktTest en zie dat het werkt  Merk op hoe het input-element in HTML afhankelijk isMerk op hoe het input-element in HTML afhankelijk is van het type van het attribuut in het modelvan het type van het attribuut in het model
  22. 22. WebTaVe 2007-’08Ruby On RailsRuby On Rails Declaratieve formuliervalidatieDeclaratieve formuliervalidatie  Eigenlijk is verplichte aanwezigheid niks van hetEigenlijk is verplichte aanwezigheid niks van het formulier, maar van het modelformulier, maar van het model  cfr. null/not null in database-schemacfr. null/not null in database-schema  Validatie hoort dus thuis in model, niet inValidatie hoort dus thuis in model, niet in formulierformulier  Open Models/post.rbOpen Models/post.rb  Voeg toe aan klasse-definitieVoeg toe aan klasse-definitie validates_presence_of :title, :bodyvalidates_presence_of :title, :body  Test applicatie!Test applicatie!
  23. 23. WebTaVe 2007-’08Ruby On RailsRuby On Rails Netbeans helpt!Netbeans helpt!  Je mag ook vp typen en op tab drukken)Je mag ook vp typen en op tab drukken)  Of typ validates_ en druk op ctrl-spatieOf typ validates_ en druk op ctrl-spatie  Oef: zorg er voor dat de titel minstens 5 lang isOef: zorg er voor dat de titel minstens 5 lang is
  24. 24. WebTaVe 2007-’08Ruby On RailsRuby On Rails View aanpassenView aanpassen  In ViewsIn Views  Layouts: algemene schema van de paginaLayouts: algemene schema van de pagina  Posts: bevat “includes” die horen bij het model “post”Posts: bevat “includes” die horen bij het model “post”  Komt in de <%= yield %> van de layoutKomt in de <%= yield %> van de layout  Naam is nu .html.erb (vroeger rhtml)Naam is nu .html.erb (vroeger rhtml)  OefeningOefening  Verander <% for post in @posts %> inVerander <% for post in @posts %> in <% for post in @posts.reverse %><% for post in @posts.reverse %>  Voeg toeVoeg toe <em> <%= link_to 'Permalink', :action => 'show', :id => post %></em><em> <%= link_to 'Permalink', :action => 'show', :id => post %></em>  Voeg wat meer vormgeving toe!Voeg wat meer vormgeving toe!
  25. 25. WebTaVe 2007-’08Ruby On RailsRuby On Rails Ondersteuning ER-schema (1)Ondersteuning ER-schema (1)  Maak model voor elke entiteitMaak model voor elke entiteit  Vooral aandacht voor cardinaliteitenVooral aandacht voor cardinaliteiten  1-N-relatie : 1-kant1-N-relatie : 1-kant has_manyhas_many N-kant & N-kantN-kant & N-kant belongs_tobelongs_to 1-kant1-kant  class Post < ActiveRecord::Baseclass Post < ActiveRecord::Base belongs_to :authorbelongs_to :author endend  class Author < ActiveRecord::Baseclass Author < ActiveRecord::Base has_many: posthas_many: post endend
  26. 26. WebTaVe 2007-’08Ruby On RailsRuby On Rails Ondersteuning ER-schema (2)Ondersteuning ER-schema (2)  1-1-relatie: hangt af van waar je verwijzing naar andere1-1-relatie: hangt af van waar je verwijzing naar andere tabel stockeerttabel stockeert  Bv. in Author verwijzing naar Portfolio, dan in Author “belongs_toBv. in Author verwijzing naar Portfolio, dan in Author “belongs_to :portfolio” en in Portfolio “has_one :author”:portfolio” en in Portfolio “has_one :author”  belongs_to :belongs_to :objectobject voegt attribuutvoegt attribuut objectobject_id toe!_id toe!  N-M-relatie :N-M-relatie : has_and_belongs_to_manyhas_and_belongs_to_many aan beideaan beide kantenkanten  Maakt tabel voor N-M-relatieMaakt tabel voor N-M-relatie  http://www.netbeans.org/kb/60/ruby/model.htmlhttp://www.netbeans.org/kb/60/ruby/model.html  Comment toevoegen aan postComment toevoegen aan post  doen!doen!
  27. 27. WebTaVe 2007-’08Ruby On RailsRuby On Rails Speciale relatie: acts_as_listSpeciale relatie: acts_as_list  Zorgt voor lus doorheen belongs_to elementZorgt voor lus doorheen belongs_to element  Als meer dan één belongs_toAls meer dan één belongs_to :scope => “:scope => “objectobject_id”_id”  Voegt gedrag to: een lusVoegt gedrag to: een lus class Post < ActiveRecord::Baseclass Post < ActiveRecord::Base belongs_to :Authorbelongs_to :Author acts_as_list :scope => “author_id”acts_as_list :scope => “author_id” endend …… auteur = Author.find 1auteur = Author.find 1 auteur.posts.each {…}auteur.posts.each {…}  Plus nog verschillende andere methodesPlus nog verschillende andere methodes
  28. 28. WebTaVe 2007-’08Ruby On RailsRuby On Rails Ruby voor viewRuby voor view  Standaard view aanpassenStandaard view aanpassen  Vooral declaratiefVooral declaratief  image_tag(“url”, …)image_tag(“url”, …)  link_to ‘link-titel’, { :action => ‘methode’, :id =>link_to ‘link-titel’, { :action => ‘methode’, :id => 17}17}  :confirm => “vraag”:confirm => “vraag”  Dikwijls lussenDikwijls lussen
  29. 29. WebTaVe 2007-’08Ruby On RailsRuby On Rails _partials_partials  ““includes” om op verschillende pagina’s teincludes” om op verschillende pagina’s te hergebruikenhergebruiken  Bestandje dat begint met underscoreBestandje dat begint met underscore  render :partial => 'name', :locals => {:var1render :partial => 'name', :locals => {:var1 => value, :var2 => value}=> value, :var2 => value}
  30. 30. WebTaVe 2007-’08Ruby On RailsRuby On Rails Ruby lussenRuby lussen <% for item in @items %><% for item in @items %> …… (met(met itemitem)) <% end %><% end %> <% @post do |f| %><% @post do |f| %> …… (met(met ff )) <% end %><% end %>
  31. 31. WebTaVe 2007-’08Ruby On RailsRuby On Rails Ruby voor controllerRuby voor controller  Directe mapping tussen view-bestand enDirecte mapping tussen view-bestand en controller-methodecontroller-methode  Methode vult @variabelen zodat view dieMethode vult @variabelen zodat view die kan gebruikenkan gebruiken  Vooral findsVooral finds
  32. 32. WebTaVe 2007-’08Ruby On RailsRuby On Rails ZoekfunctiesZoekfuncties (sql weg geabstraheerd)(sql weg geabstraheerd)  User .find(:first)User .find(:first) # => User object# => User object  User .find(:all)User .find(:all) # => Array with all User objects# => Array with all User objects  User .find(3)User .find(3) # => User object with id 3# => User object with id 3  User .find(:all, conditions =>User .find(:all, conditions => {:first_name => “Jamis”, :last_name => “Buck”}){:first_name => “Jamis”, :last_name => “Buck”})  User .find(:all, conditions => “title like ‘d%’ ” )User .find(:all, conditions => “title like ‘d%’ ” )  Met variabelen: [] + ?Met variabelen: [] + ?  User .find(:all, [conditions => “title like ‘%?%’ ”, var1] )User .find(:all, [conditions => “title like ‘%?%’ ”, var1] )
  33. 33. WebTaVe 2007-’08Ruby On RailsRuby On Rails Zoekfunctie (2)Zoekfunctie (2) users = User .find(:all,users = User .find(:all, :conditions => [“users.id = taggings.taggable_id:conditions => [“users.id = taggings.taggable_id and users.age > ?”, 25],and users.age > ?”, 25], :limit => 10,:limit => 10, :offset => 5,:offset => 5, :order => “users.last_name”,:order => “users.last_name”, :joins => “, tagggings”,:joins => “, tagggings”, :select => “count(*) as count, users.last_name”,:select => “count(*) as count, users.last_name”, :group => “users.last_name”):group => “users.last_name”)
  34. 34. WebTaVe 2007-’08Ruby On RailsRuby On Rails Ruby voor het modelRuby voor het model  Extra data members (naast db-dingen)Extra data members (naast db-dingen) attrattr_xxx @variabele_naam_xxx @variabele_naam  attr_accessor (rw), attr_read (r), attr_write (w)attr_accessor (rw), attr_read (r), attr_write (w)  Extra methodesExtra methodes defdef methodemethode((param1, param2param1, param2)) @var1 = param1@var1 = param1;; endend def to_stringdef to_string "Item #{@id} is a #{@type}: Price $#{@price}""Item #{@id} is a #{@type}: Price $#{@price}" endend  Gebeurt eigenlijk niet zo (heel) veelGebeurt eigenlijk niet zo (heel) veel
  35. 35. WebTaVe 2007-’08Ruby On RailsRuby On Rails Eigen formEigen form  Slide 209 en verderSlide 209 en verder
  36. 36. WebTaVe 2007-’08Ruby On RailsRuby On Rails Javascript en Ajax toevoegenJavascript en Ajax toevoegen  http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ahttp://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_a jax.htmljax.html  Ajax_scaffold_generatorAjax_scaffold_generator  Slide 236 en verderSlide 236 en verder
  37. 37. WebTaVe 2007-’08Ruby On RailsRuby On Rails Geavanceerde slidesGeavanceerde slides  http://www.slideshare.net/peter_marklund/http://www.slideshare.net/peter_marklund/ ruby-on-rails-101-presentation-slides-for-ruby-on-rails-101-presentation-slides-for- a-five-day-introductory-coursea-five-day-introductory-course

×