Your SlideShare is downloading. ×
0
Ruby on Rials  The Rails Way 1
Rails ≠ Ruby
Ruby on Rails Principes
Thick models, thincontrollers & thin views Views houden zich bezig met het tonen van data Controllers bepalen welke functi...
Convention over Configuration
Convention over         ConfigurationModel BlogComment
Convention over          ConfigurationModel BlogCommentstaat in app/models/blog_comment.rb
Convention over          ConfigurationModel BlogCommentstaat in app/models/blog_comment.rbheeft een tabelnaam blog_comments
Convention over           ConfigurationModel BlogComment staat in app/models/blog_comment.rb heeft een tabelnaam blog_comme...
Convention over            ConfigurationModel BlogComment staat in app/models/blog_comment.rb heeft een tabelnaam blog_comm...
Convention over            ConfigurationModel BlogComment staat in app/models/blog_comment.rb heeft een tabelnaam blog_comm...
DRY: Don’t Repeat    Yourself
DRY: Don’t Repeat    Yourself Gebruik partials in views
DRY: Don’t Repeat    Yourself Gebruik partials in views Gebruik filters in controllers
Models: ActiveRecordActiveRecord is verantwoordelijk voor alledatagerelateerde processenObject/Relationship Mapping (ORM) ...
Controllers:    ActionControllerActionController is verantwoordelijk voor deafhandeling van user requestsFaciliteert de co...
Views: ActionViewActionView is verantwoordelijk voor hettonen van (delen van) pagina’sMaakt gebruik van een template syste...
RESTRepresentation State TransferGebruikt HTTP (Get, Post, Put, Delete) voorCRUD actiesroutes.rb definieert restfull resour...
Ruby on Rails Tools
command linerails consolerails serverrakerails generaterails dbconsolerails new app_name
Generators
Generators> rails generate model MyModel title:string body:text
Generators> rails generate model MyModel title:string body:text invoke active_record create   db/migrate/20120618141106_cr...
Generators> rails generate model MyModel title:string body:text     > rails generate controller home index invoke active_r...
Generators> rails generate model MyModel title:string body:text     > rails generate controller home index invoke active_r...
migrations
migrations> rails generate migration CreateProducts
migrations> rails generate migration CreateProducts  class CreateProducts < ActiveRecord::Migration    def up    end      ...
migrations> rails generate migration CreateProducts  class CreateProducts < ActiveRecord::Migration    def up      create_...
TDD / BDDSchrijf een test die faalt en schrijf daarnacode om de test te laten slagenHet geeft inzicht in wat de code moet ...
ActiveSupport::TestCase   require test_helper       class PostTest < ActiveSupport::TestCase     test "should not save pro...
ActionController::TestCase    require ‘test_helper’    test "should create post" do      assert_difference(Post.count) do ...
ActionDispatch::IntegrationTest   require test_helper       class UserFlowsTest < ActionDispatch::IntegrationTest     fixtu...
Een Rails Applicatie
Een Rails Applicatiegem install railsgem install bundlerrails new dit_wil_ik --database mysql
Gemfile1 plaats voor al je gem dependenciesGemfile.lock houdt de versies bij en hoort inGit te staan
Bundlerbundle installbundle updatebundle update mijn_gem
Database configconfig/database.ymlHOORT NIET IN GIT!!!!rake db:createrake db:migraterake db:rollbackrake db:rollback STEP=3r...
http://jonathanhui.com/       ruby-rails-3
Models> rails generate model product title:string description:text url:string rating:integerinvoke active_recordcreate   d...
ModelsMigration                                        Modelclass CreateProducts < ActiveRecord::Migration   class Product...
Modelsclass Product < ActiveRecord::Base  attr_accessible :description, :rating, :title, :url validate :title, :presence =...
Assosiations
Assosiationsbelongs_to object bevat id van de relatiehas_one de relatie bevat id van objecthas_many de relatie bevat id va...
Models> rails generate model user name:stringinvoke active_recordcreate   db/migrate/20120619103822_create_users.rbcreate ...
Modelsclass AddUserIdToProducts < ActiveRecord::Migration  def change    add_column :products, :user_id, :integer  endendc...
Modelsp = Product.create :title => “Boek”u = User.create :name => “Rupert Vliegje”p.user = up.saveu.products.create => “Pi...
Scopes
Scopesclass Product < ActiveRecord::Base  attr_accessible :description, :rating, :title, :url belongs_to :user scope :orde...
ScopesProduct.rated(3)Product.orderedProduct.rated(3).ordered
Polymorphic...
PolimorphicEen model kan tot meerdere modellenbehoren binnen dezelfde assosiatie.Bijvoorbeeld een plaatje dat bij een prod...
Polymorphicclass Picture < ActiveRecord::Base  belongs_to :imageable, :polymorphic => trueend class Product < ActiveRecord...
Polymorphicclass CreatePictures < ActiveRecord::Migration  def change    create_table :pictures do |t|      t.string  :nam...
Polymorphic u = User.first u.pictures.create :name => "foto" p = Product.first p.pictures.create :name => "plaatje"
Controllers
Controllers> rails generate controller Products index show create app/controllers/products_controller.rb route get "produc...
Controllersclass ProductsController < ApplicationController  def index  end def show endend
Controllersclass ProductsController < ApplicationController  def index    @products = Product.ordered  end def show   @pro...
Viewsapp/views/products/index.html.erb     <h1>Products#index</h1>     <p>Find me in app/views/products/index.html.erb</p>...
Views    app/views/products/index.html.erb                           <h1>Products</h1>                           <% @produ...
Routingconfig/routes.rbDitWilIk::Application.routes.draw do  resources :products, :only => [:index, :show]end
Routingconfig/routes.rbDitWilIk::Application.routes.draw do  resources :products, :only => [:index, :show]endrake routes
Routingconfig/routes.rbDitWilIk::Application.routes.draw do  resources :products, :only => [:index, :show]endrake routespro...
En dan
Cookie, Session & Flash
Cookies# Retrieve cookie with name "uid"u_name = cookies[:uid]# Set cookiecookies[:uid] = u_name# Delete a cookiecookies.d...
Sessionssession[:user_id] = user.id # sessie opslaan@my_user ||= session[:user_id] && User.find_by_id(session[:user_id])ses...
Flashflash[:notice] = “Alles is OK!”<%= flash[:notice] if flash[:notice].present? %>redirect_to products_path, :notice => “Pr...
FormsRails kent geen Form objectenForms staan gewoon in viewsAlle validaties horen in het ModelHet Form interacteert met d...
Forms                              # Forms voor resources                              <%= form_for(@product) do |f| %>   ...
En nu?
En nu?railsforzombies.org
En nu?        railsforzombies.orgrails new dit_wil_ik --database mysql
En nu?                        railsforzombies.org          rails new dit_wil_ik --database mysqlVerlanglijstje- Gebruiker ...
En nu?                        railsforzombies.org          rails new dit_wil_ik --database mysql            Demo: 5 juliVe...
Upcoming SlideShare
Loading in...5
×

The Rails way

373

Published on

Introductie tot Programeren in Ruby on Rails

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
373
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "The Rails way"

    1. 1. Ruby on Rials The Rails Way 1
    2. 2. Rails ≠ Ruby
    3. 3. Ruby on Rails Principes
    4. 4. Thick models, thincontrollers & thin views Views houden zich bezig met het tonen van data Controllers bepalen welke functies er per request op het model worden aangeroepen Models bevatten alle business logica (CRUD, validaties, scopes, find)
    5. 5. Convention over Configuration
    6. 6. Convention over ConfigurationModel BlogComment
    7. 7. Convention over ConfigurationModel BlogCommentstaat in app/models/blog_comment.rb
    8. 8. Convention over ConfigurationModel BlogCommentstaat in app/models/blog_comment.rbheeft een tabelnaam blog_comments
    9. 9. Convention over ConfigurationModel BlogComment staat in app/models/blog_comment.rb heeft een tabelnaam blog_commentsController ArchiveController
    10. 10. Convention over ConfigurationModel BlogComment staat in app/models/blog_comment.rb heeft een tabelnaam blog_commentsController ArchiveController staat in app/controllers/archive_controller.rb
    11. 11. Convention over ConfigurationModel BlogComment staat in app/models/blog_comment.rb heeft een tabelnaam blog_commentsController ArchiveController staat in app/controllers/archive_controller.rb views staan in app/views/archive
    12. 12. DRY: Don’t Repeat Yourself
    13. 13. DRY: Don’t Repeat Yourself Gebruik partials in views
    14. 14. DRY: Don’t Repeat Yourself Gebruik partials in views Gebruik filters in controllers
    15. 15. Models: ActiveRecordActiveRecord is verantwoordelijk voor alledatagerelateerde processenObject/Relationship Mapping (ORM) data inde database wordt gemapt naar een classe inde applicatie
    16. 16. Controllers: ActionControllerActionController is verantwoordelijk voor deafhandeling van user requestsFaciliteert de communicatie tussen het modelen de view
    17. 17. Views: ActionViewActionView is verantwoordelijk voor hettonen van (delen van) pagina’sMaakt gebruik van een template systeemvb: .html.erb .xml.erb .js.erb
    18. 18. RESTRepresentation State TransferGebruikt HTTP (Get, Post, Put, Delete) voorCRUD actiesroutes.rb definieert restfull resources
    19. 19. Ruby on Rails Tools
    20. 20. command linerails consolerails serverrakerails generaterails dbconsolerails new app_name
    21. 21. Generators
    22. 22. Generators> rails generate model MyModel title:string body:text
    23. 23. Generators> rails generate model MyModel title:string body:text invoke active_record create db/migrate/20120618141106_create_my_models.rb create app/models/my_model.rb invoke test_unit create test/unit/my_model_test.rb create test/fixtures/my_models.yml
    24. 24. Generators> rails generate model MyModel title:string body:text > rails generate controller home index invoke active_record create db/migrate/20120618141106_create_my_models.rb create app/models/my_model.rb invoke test_unit create test/unit/my_model_test.rb create test/fixtures/my_models.yml
    25. 25. Generators> rails generate model MyModel title:string body:text > rails generate controller home index invoke active_record create app/controllers/home_controller.rb create db/migrate/20120618141106_create_my_models.rb route get "home/index" create app/models/my_model.rb invoke erb invoke test_unit create app/views/home create test/unit/my_model_test.rb create app/views/home/index.html.erb create test/fixtures/my_models.yml invoke test_unit create test/functional/home_controller_test.rb invoke helper create app/helpers/home_helper.rb invoke test_unit create test/unit/helpers/home_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/home.js.coffee invoke scss create app/assets/stylesheets/home.css.scss
    26. 26. migrations
    27. 27. migrations> rails generate migration CreateProducts
    28. 28. migrations> rails generate migration CreateProducts class CreateProducts < ActiveRecord::Migration   def up   end     def down   end end
    29. 29. migrations> rails generate migration CreateProducts class CreateProducts < ActiveRecord::Migration   def up     create_table :products do |t|       t.string :name       t.text :description         t.timestamps     end   end     def down     drop_table :products   end end
    30. 30. TDD / BDDSchrijf een test die faalt en schrijf daarnacode om de test te laten slagenHet geeft inzicht in wat de code moet doenvoordat deze geschreven wordtTDD test afzonderlijke unitsBDD test interactie tussen de units
    31. 31. ActiveSupport::TestCase require test_helper   class PostTest < ActiveSupport::TestCase test "should not save product without title" do    product = Product.new    assert !product.save end end class Product < ActiveRecord::Base   validates :title, :presence => true end
    32. 32. ActionController::TestCase require ‘test_helper’ test "should create post" do   assert_difference(Post.count) do     post :create, :post => { :title => Hi, :body => This is my first post.}   end   assert_redirected_to post_path(assigns(:post))   assert_equal Post was successfully created., flash[:notice] end
    33. 33. ActionDispatch::IntegrationTest require test_helper   class UserFlowsTest < ActionDispatch::IntegrationTest   fixtures :users     test "login and browse site" do     # login via https     https!     get "/login"     assert_response :success       post_via_redirect "/login", :username => users(:avs).username, :password => users(:avs).password     assert_equal /welcome, path     assert_equal Welcome avs!, flash[:notice]       https!(false)     get "/posts/all"     assert_response :success     assert assigns(:products)   end end
    34. 34. Een Rails Applicatie
    35. 35. Een Rails Applicatiegem install railsgem install bundlerrails new dit_wil_ik --database mysql
    36. 36. Gemfile1 plaats voor al je gem dependenciesGemfile.lock houdt de versies bij en hoort inGit te staan
    37. 37. Bundlerbundle installbundle updatebundle update mijn_gem
    38. 38. Database configconfig/database.ymlHOORT NIET IN GIT!!!!rake db:createrake db:migraterake db:rollbackrake db:rollback STEP=3rake db:migrate:redo STEP=3
    39. 39. http://jonathanhui.com/ ruby-rails-3
    40. 40. Models> rails generate model product title:string description:text url:string rating:integerinvoke active_recordcreate db/migrate/20120619094230_create_products.rbcreate app/models/product.rbinvoke test_unitcreate test/unit/product_test.rbcreate test/fixtures/products.yml
    41. 41. ModelsMigration Modelclass CreateProducts < ActiveRecord::Migration class Product < ActiveRecord::Base def change attr_accessible :description, :rating, :title, :url create_table :products do |t| end t.string :title t.text :description Test t.string :url t.integer :rating require test_helper t.timestamps end class ProductTest < ActiveSupport::TestCase end # test "the truth" doend # assert true # end end
    42. 42. Modelsclass Product < ActiveRecord::Base attr_accessible :description, :rating, :title, :url validate :title, :presence => trueendrequire test_helperclass ProductTest < ActiveSupport::TestCase test "should not save product without title" do product = Product.new assert !product.save endend
    43. 43. Assosiations
    44. 44. Assosiationsbelongs_to object bevat id van de relatiehas_one de relatie bevat id van objecthas_many de relatie bevat id van objecthas_and_belongs_to many-to-many relatiemet tussentabel
    45. 45. Models> rails generate model user name:stringinvoke active_recordcreate db/migrate/20120619103822_create_users.rbcreate app/models/user.rbinvoke test_unitcreate test/unit/user_test.rbcreate test/fixtures/users.yml> rails generate migration AddUserIdToProductsinvoke active_recordcreate db/migrate/20120619103714_add_user_id_to_products.rb
    46. 46. Modelsclass AddUserIdToProducts < ActiveRecord::Migration def change add_column :products, :user_id, :integer endendclass Product < ActiveRecord::Base attr_accessible :description, :rating, :title, :url belong_to :user validate :title, :presence => trueendclass User < ActiveRecord::Base attr_accessible :name has_many :productsend
    47. 47. Modelsp = Product.create :title => “Boek”u = User.create :name => “Rupert Vliegje”p.user = up.saveu.products.create => “Pizza”
    48. 48. Scopes
    49. 49. Scopesclass Product < ActiveRecord::Base attr_accessible :description, :rating, :title, :url belongs_to :user scope :ordered, order(:title) scope :rated, lambda{|rating| where("rating >= ?", rating)} validates :title, :presence => trueend
    50. 50. ScopesProduct.rated(3)Product.orderedProduct.rated(3).ordered
    51. 51. Polymorphic...
    52. 52. PolimorphicEen model kan tot meerdere modellenbehoren binnen dezelfde assosiatie.Bijvoorbeeld een plaatje dat bij een productof een user hoort
    53. 53. Polymorphicclass Picture < ActiveRecord::Base  belongs_to :imageable, :polymorphic => trueend class Product < ActiveRecord::Base attr_accessible :description, :rating, :title, :url belong_to :user has_many :pictures, :as => :imageable scope :ordered, order(:title) scope :rated, lambda{|rating| where("rating >= ?", rating)} validate :title, :presence => trueend class User < ActiveRecord::Base attr_accessible :name has_many :products  has_many :pictures, :as => :imageableend
    54. 54. Polymorphicclass CreatePictures < ActiveRecord::Migration  def change    create_table :pictures do |t|      t.string  :name      t.integer :imageable_id      t.string  :imageable_type      t.timestamps    end  endendclass CreatePictures < ActiveRecord::Migration  def change    create_table :pictures do |t|      t.string :name      t.references :imageable, :polymorphic => true      t.timestamps    end  endend
    55. 55. Polymorphic u = User.first u.pictures.create :name => "foto" p = Product.first p.pictures.create :name => "plaatje"
    56. 56. Controllers
    57. 57. Controllers> rails generate controller Products index show create app/controllers/products_controller.rb route get "products/show" route get "products/index" invoke erb create app/views/products create app/views/products/index.html.erb create app/views/products/show.html.erb invoke test_unit create test/functional/products_controller_test.rb invoke helper create app/helpers/products_helper.rb invoke test_unit create test/unit/helpers/products_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/products.js.coffee invoke scss create app/assets/stylesheets/products.css.scss
    58. 58. Controllersclass ProductsController < ApplicationController def index end def show endend
    59. 59. Controllersclass ProductsController < ApplicationController def index @products = Product.ordered end def show @product = Product.find_by_id(params[:id]) endend
    60. 60. Viewsapp/views/products/index.html.erb <h1>Products#index</h1> <p>Find me in app/views/products/index.html.erb</p>app/views/products/show.html.erb <h1>Products#show</h1> <p>Find me in app/views/products/show.html.erb</p>
    61. 61. Views app/views/products/index.html.erb <h1>Products</h1> <% @products.each do |p| %> <p><%= link_to p.title, p %></p> <% end %> app/views/products/show.html.erb<h1><%= @product.title %></h1><p><%= @product.description.present? ? "#{@product.descirption}" : "Geen beschrijving"%></p><p><%= @product.rating.present? ? "#{@product.rating}" : "Geen rating" %></p><p><%= link_to "<< Overzicht", products_path %></p>
    62. 62. Routingconfig/routes.rbDitWilIk::Application.routes.draw do resources :products, :only => [:index, :show]end
    63. 63. Routingconfig/routes.rbDitWilIk::Application.routes.draw do resources :products, :only => [:index, :show]endrake routes
    64. 64. Routingconfig/routes.rbDitWilIk::Application.routes.draw do resources :products, :only => [:index, :show]endrake routesproducts GET /products(.:format) products#indexproduct GET /products/:id(.:format) products#show
    65. 65. En dan
    66. 66. Cookie, Session & Flash
    67. 67. Cookies# Retrieve cookie with name "uid"u_name = cookies[:uid]# Set cookiecookies[:uid] = u_name# Delete a cookiecookies.delete(:uid)
    68. 68. Sessionssession[:user_id] = user.id # sessie opslaan@my_user ||= session[:user_id] && User.find_by_id(session[:user_id])session[:user_id] = nil # sessie verwijderenreset_session # Sessie resetten
    69. 69. Flashflash[:notice] = “Alles is OK!”<%= flash[:notice] if flash[:notice].present? %>redirect_to products_path, :notice => “Product is opgeslagen”flash[:notice].now = “Blijft alleen bewaard voor dit request (AJAX)”flash[:notice].keep = “Blijft bewaard voor volgend request”
    70. 70. FormsRails kent geen Form objectenForms staan gewoon in viewsAlle validaties horen in het ModelHet Form interacteert met de ControllerDe Controller met het Model
    71. 71. Forms # Forms voor resources <%= form_for(@product) do |f| %> <%= f.label :title %> <%= f.text_field :title %> <%= f.submit “Opslaan” <% end %># Onafhankelijk formulier<%= form_tag({:controller => "people", :action => "search"}, :method => "get", :class => "nifty_form") %> <p>value:<%= text_field_tag(:search) %></p> <%= submit_tag Zoeken %><% end %>
    72. 72. En nu?
    73. 73. En nu?railsforzombies.org
    74. 74. En nu? railsforzombies.orgrails new dit_wil_ik --database mysql
    75. 75. En nu? railsforzombies.org rails new dit_wil_ik --database mysqlVerlanglijstje- Gebruiker kan zich registreren- Gebruiker kan producten toevoegen die hij graag zou willen hebben- Gebruiker kan een rating aan een product geven- Gebruiker kan een link naar betreffende webshop aan een producten toevoegen- Gebruiker kan een plaatje aan een product toevoegen- Gebruiker kan bij een product een feestgelegenheid toevoegen- Gebruiker kan een toegevoegd product wijzigen en verwijderen- Gebruiker kan feestgelegenheden toevoegen, wijzigen en verwijderen- Gebruiker kan een overzicht van zijn lijst op het scherm zien- Gebruiker kan het overzicht van zijn lijst emailen- ...
    76. 76. En nu? railsforzombies.org rails new dit_wil_ik --database mysql Demo: 5 juliVerlanglijstje- Gebruiker kan- Gebruiker kan zich registreren producten toevoegen die hij graag zou willen hebben- Gebruiker kan een rating aan een product geven- Gebruiker kan een link naar betreffende webshop aan een producten toevoegen- Gebruiker kan een plaatje aan een product toevoegen- Gebruiker kan bij een product een feestgelegenheid toevoegen- Gebruiker kan een toegevoegd product wijzigen en verwijderen- Gebruiker kan feestgelegenheden toevoegen, wijzigen en verwijderen- Gebruiker kan een overzicht van zijn lijst op het scherm zien- Gebruiker kan het overzicht van zijn lijst emailen- ...
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×