SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Je code mon blog 
avec Ruby et Ruby on Rails
WIFI 
SSID : OFAC_BUREAU1 
Pwd : oFaC-wireless
Cédric Bousmanne (@akyrho) 
Ruby on Rails developer depuis 2008 
Freelance depuis 2010 
● Pepper & Koffee (2008 - 2012) 
● 2houses.com (fév. 2012 - mars 2014) 
● Apptweak.com (depuis mars 2014)
Sondage d’opinion 
Qui a déjà utilisé un langage de programmation 
? 
Si oui, le(s)quel(s) ?
Installation de Ruby 
https://bitnami.com/stack/ruby/installer
Ruby vs. Ruby on Rails (RoR) 
Langage de 
programmation 
interpreté, orienté 
objet 
Framework construit 
sur Ruby
MVC 
Modèle : traitement des données, interaction 
BDD 
Vue : Présente les résultats, recevoir les 
actions de l’utilisateur 
Contrôleur : Réception des événements, 
enclenche les actions à effectuer
MVC par l’exemple 
Je souhaite envoyer un commentaire 
● La vue me présente un formulaire que je 
rempli 
● Le contrôleur réceptionne la requête 
lorsque j’ai envoyé mon commentaire 
● Le modèle valide les informations reçues 
avant de les enregistrer
Philosophie de Ruby on Rails 
DRY (Don’t Repeat Yourself) 
Facilité par MVC et la métaprogrammation 
Convention over configuration 
Suivre les conventions plutôt que de les 
préciser
Exemple de convention 
Singulier vs. pluriel 
Modèle : User 
Controller : UsersController
Vérifier l’installation 
cd C:/Bitnami/rubystack-2.0.0-20 
use_ruby.bat 
ruby -v 
-> ruby 2.0.0p481
Editeur de texte 
http://www.sublimetext.com/2
Créer un projet Rails 
gem install rails # gem install <gem> 
rails new blog # rails new <project> 
cd blog
Architecture d’un projet rails 
app 
- assets 
- controllers 
- helpers 
- mailers 
- models 
- views
Création du premier scafold 
rails generate scaffold article title:string content: 
text 
invoke active_record 
create db/migrate/20141009165133_create_articles.rb 
create app/models/article.rb 
invoke test_unit 
create test/models/article_test.rb 
create test/fixtures/articles.yml 
invoke resource_route 
route resources :articles 
invoke scaffold_controller 
create app/controllers/articles_controller.rb 
(...)
Ce qu’il s’est passé 
● Création d’une migration 
● Création du modèle 
● Création des routes 
● Création du controlleur 
● Création des vues 
● Création des assets (js/css) 
● Création des tests
Migration de la base de donnée 
rake db:migrate 
-- create_table(:articles)
Publier un article 
http://localhost:3000/articles/new
Liste des articles 
http://localhost:3000/articles
Les routes 
fichier config/routes.rb 
resources :articles 
Prefix Verb URI Pattern Controller#Action 
articles GET /articles articles#index 
POST /articles articles#create 
new_article GET /articles/new articles#new 
edit_article GET /articles/:id/edit articles#edit 
article GET /articles/:id articles#show 
PUT /articles/:id articles#update 
DELETE /articles/:id articles#destroy
Ajouter la route par défaut 
config/routes.rb 
resources :articles 
root ‘articles#index’
Modifier l’index des articles 
app/views/articles/index.html.erb 
<% @articles.each do |article| %> 
<%= render article %> 
<% end %> 
<%= link_to 'New Article', new_article_path %> 
puis rafraîchir la page
Création du partiel 
app/views/articles/_articles.html.erb 
<section> 
<h2><%= link_to article.title, article %></h2> 
<%= article.content %> 
</section> 
<hr>
Un peu de style 
app/assets/stylesheets/articles.css.scss 
https://gist.githubusercontent. 
com/cedricbousmanne/4b0a4bed2cb46a07a8fd/raw/cd8362e32e917c4648ed47b91870f91b6381e8b6 
/articles.css.scss
Articles#show 
app/views/articles/show.html.erb 
<%= render @article %> 
puis rafraîchir la page
Le layout 
app/views/layouts/application.html.erb 
<h1><%= link_to “My awesome blog”, root_path %></h1> 
<%= yield %> 
puis rafraîchir la page
Un peu d’ordre 
app/models/article.rb 
class Article < ActiveRecord::Base 
default_scope { order(“created_at DESC”) } 
end 
puis rafraîchir la page
Valider la présence d’attributs 
app/models/article.rb 
class Article < ActiveRecord::Base 
default_scope { order(“created_at DESC”) } 
validates_presence_of :title 
validates_presence_of :content 
end 
puis tenter d’ajouter un article sans titre et/ou sans contenu
Et après ? 
● Déporter les actions create, destroy, update dans une 
interface d’administration sécurisée 
● Ajouter un système de commentaire 
● Gérer la mise en page des articles 
● Gérer l’ajout d’image/vidéo 
● Implémenter un système de pagination 
● Gestion multi-utilisateur 
● Gestion d’état (en ligne/hors ligne) 
● ...
Les gems 
Rubygems est gestionnaire de paquets pour 
ruby (~= plugins) 
+/- 90,000 gems disponibles
Installation d’une gem 
- En ligne de commande 
$ gem install devise 
- Via le Gemfile (recommandé) 
Ajout d’une ligne dans le Gemfile 
$ bundle install
Gems populaires 
Devise Authentification / Gestion des 
utilisateurs 
Cancan Gestion des permissions 
Kaminari Pagination 
Capistrano Automatisation du déploiement 
Carrierwave 
Dragonfly 
Upload / gestion d’image / fichier
Pour aller plus loin 
● rubygems.org 
● ruby-toolbox.com 
● railscasts.com 
● guides.rubyonrails.org
Des questions? 
twitter : @akyrho 
mail : cedric@studio-sept.be 
Merci de votre participation !

Contenu connexe

Tendances

AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSFrédéric DUPERIER
 
Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)Clément Dubois
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsOLBATI
 
Comparatif des frameworks js mv
Comparatif des frameworks js mvComparatif des frameworks js mv
Comparatif des frameworks js mvMael Monnier
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursHoracio Gonzalez
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorArthurMaroulier
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Yves-Emmanuel Jutard
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)Rui Carvalho
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindPhilippe Didiergeorges
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à dockerBoubker ABERWAG
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureCocoaHeads France
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScriptHabib Ayad
 

Tendances (20)

AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Débuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJSDébuter avec Rails::API & AngularJS
Débuter avec Rails::API & AngularJS
 
Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)Le futur de AngularJS (2.0)
Le futur de AngularJS (2.0)
 
Geek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.jsGeek Time Mai 2017 : Vue.js
Geek Time Mai 2017 : Vue.js
 
AngularJS
AngularJSAngularJS
AngularJS
 
Comparatif des frameworks js mv
Comparatif des frameworks js mvComparatif des frameworks js mv
Comparatif des frameworks js mv
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - CoursENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
ENIB cours CAI Web - Séance 4 - Frameworks/Spring - Cours
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme Meteor
 
Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014Apéro techno node.js + AngularJS @Omnilog 2014
Apéro techno node.js + AngularJS @Omnilog 2014
 
03 presentation-navigation
03 presentation-navigation03 presentation-navigation
03 presentation-navigation
 
SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)SPA avec Angular et SignalR (FR)
SPA avec Angular et SignalR (FR)
 
Angular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium VersusmindAngular2 / Typescript symposium Versusmind
Angular2 / Typescript symposium Versusmind
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
Polymer
PolymerPolymer
Polymer
 
Support : introduction à docker
Support : introduction à dockerSupport : introduction à docker
Support : introduction à docker
 
Vue Introduction
Vue IntroductionVue Introduction
Vue Introduction
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume Faure
 
Partie1 TypeScript
Partie1 TypeScriptPartie1 TypeScript
Partie1 TypeScript
 

En vedette

Google Wave, le dernier de chez Google
Google Wave, le dernier de chez GoogleGoogle Wave, le dernier de chez Google
Google Wave, le dernier de chez GoogleCyril Mougel
 
Initiation Rails Rspec
Initiation Rails RspecInitiation Rails Rspec
Initiation Rails RspecCyril Mougel
 
Cucumber Le Text Qui Test
Cucumber Le Text Qui TestCucumber Le Text Qui Test
Cucumber Le Text Qui TestCyril Mougel
 
Datamapper L Orm Dans Rails 3
Datamapper L Orm Dans Rails 3Datamapper L Orm Dans Rails 3
Datamapper L Orm Dans Rails 3Cyril Mougel
 
Merb Le Framework Tellement Bien Qu Il Sera Integré Dans Rails
Merb Le Framework Tellement Bien Qu Il Sera Integré Dans RailsMerb Le Framework Tellement Bien Qu Il Sera Integré Dans Rails
Merb Le Framework Tellement Bien Qu Il Sera Integré Dans RailsCyril Mougel
 
Patchwork UTF-8 : portabilité unicode et graphèmes clusters
Patchwork UTF-8 : portabilité unicode et graphèmes clustersPatchwork UTF-8 : portabilité unicode et graphèmes clusters
Patchwork UTF-8 : portabilité unicode et graphèmes clustersnicolas.grekas
 

En vedette (8)

Mongoid
MongoidMongoid
Mongoid
 
Errbit
ErrbitErrbit
Errbit
 
Google Wave, le dernier de chez Google
Google Wave, le dernier de chez GoogleGoogle Wave, le dernier de chez Google
Google Wave, le dernier de chez Google
 
Initiation Rails Rspec
Initiation Rails RspecInitiation Rails Rspec
Initiation Rails Rspec
 
Cucumber Le Text Qui Test
Cucumber Le Text Qui TestCucumber Le Text Qui Test
Cucumber Le Text Qui Test
 
Datamapper L Orm Dans Rails 3
Datamapper L Orm Dans Rails 3Datamapper L Orm Dans Rails 3
Datamapper L Orm Dans Rails 3
 
Merb Le Framework Tellement Bien Qu Il Sera Integré Dans Rails
Merb Le Framework Tellement Bien Qu Il Sera Integré Dans RailsMerb Le Framework Tellement Bien Qu Il Sera Integré Dans Rails
Merb Le Framework Tellement Bien Qu Il Sera Integré Dans Rails
 
Patchwork UTF-8 : portabilité unicode et graphèmes clusters
Patchwork UTF-8 : portabilité unicode et graphèmes clustersPatchwork UTF-8 : portabilité unicode et graphèmes clusters
Patchwork UTF-8 : portabilité unicode et graphèmes clusters
 

Similaire à Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)

Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPKristen Le Liboux
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2dhugomallet
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Sylvain Wallez
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJSAbdoulaye Dieng
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Philippe Sfeir
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfSofianeHassine2
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpementmosalah38
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
[Webinar] Techniques avancées de création de workflow - FR
[Webinar] Techniques avancées de création de workflow - FR[Webinar] Techniques avancées de création de workflow - FR
[Webinar] Techniques avancées de création de workflow - FRNuxeo
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
Activity
ActivityActivity
Activitydido
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1Sem Koto
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1Sem Koto
 
On test quoi - DCLannion 2017
On test quoi - DCLannion 2017On test quoi - DCLannion 2017
On test quoi - DCLannion 2017Artusamak
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALYoussouph Barry
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à AngularjsRossi Oddet
 

Similaire à Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon) (20)

Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHP
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
CV REBAI Hamida
CV REBAI HamidaCV REBAI Hamida
CV REBAI Hamida
 
Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011Play Framework - Toulouse JUG - nov 2011
Play Framework - Toulouse JUG - nov 2011
 
Introduction à AngularJS
Introduction à AngularJSIntroduction à AngularJS
Introduction à AngularJS
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013
 
Backbonejs presentation
Backbonejs presentationBackbonejs presentation
Backbonejs presentation
 
Developpement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdfDeveloppement_dun_site_web_Developpement.pdf
Developpement_dun_site_web_Developpement.pdf
 
Developpement dun site_web_developpement
Developpement dun site_web_developpementDeveloppement dun site_web_developpement
Developpement dun site_web_developpement
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
[Webinar] Techniques avancées de création de workflow - FR
[Webinar] Techniques avancées de création de workflow - FR[Webinar] Techniques avancées de création de workflow - FR
[Webinar] Techniques avancées de création de workflow - FR
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 
Activity
ActivityActivity
Activity
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
On test quoi - DCLannion 2017
On test quoi - DCLannion 2017On test quoi - DCLannion 2017
On test quoi - DCLannion 2017
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPAL
 
Introduction à Angularjs
Introduction à AngularjsIntroduction à Angularjs
Introduction à Angularjs
 

Plus de Café Numérique Arlon

Raspberry projets par Jean-Baptiste Renaux
Raspberry projets par Jean-Baptiste RenauxRaspberry projets par Jean-Baptiste Renaux
Raspberry projets par Jean-Baptiste RenauxCafé Numérique Arlon
 
CNA S03#08: L’utilisation de l’impression 3D dans l’architecture
CNA S03#08: L’utilisation de l’impression 3D dans l’architectureCNA S03#08: L’utilisation de l’impression 3D dans l’architecture
CNA S03#08: L’utilisation de l’impression 3D dans l’architectureCafé Numérique Arlon
 
Présentation les-podcast-geeksleague
Présentation les-podcast-geeksleaguePrésentation les-podcast-geeksleague
Présentation les-podcast-geeksleagueCafé Numérique Arlon
 
L’internet des choses @Frederic Jourdain
L’internet des choses @Frederic JourdainL’internet des choses @Frederic Jourdain
L’internet des choses @Frederic JourdainCafé Numérique Arlon
 

Plus de Café Numérique Arlon (8)

Raspberry projets par Jean-Baptiste Renaux
Raspberry projets par Jean-Baptiste RenauxRaspberry projets par Jean-Baptiste Renaux
Raspberry projets par Jean-Baptiste Renaux
 
Raspberry Pi: Les utilisations
Raspberry Pi: Les utilisationsRaspberry Pi: Les utilisations
Raspberry Pi: Les utilisations
 
CNA S03#08: 3D printing hub institute
CNA S03#08: 3D printing hub instituteCNA S03#08: 3D printing hub institute
CNA S03#08: 3D printing hub institute
 
CNA S03#08: Xtensys
CNA S03#08: XtensysCNA S03#08: Xtensys
CNA S03#08: Xtensys
 
CNA S03#08: L’utilisation de l’impression 3D dans l’architecture
CNA S03#08: L’utilisation de l’impression 3D dans l’architectureCNA S03#08: L’utilisation de l’impression 3D dans l’architecture
CNA S03#08: L’utilisation de l’impression 3D dans l’architecture
 
Présentation les-podcast-geeksleague
Présentation les-podcast-geeksleaguePrésentation les-podcast-geeksleague
Présentation les-podcast-geeksleague
 
Un objet connecté ? @Yves Prignon
Un objet connecté ? @Yves PrignonUn objet connecté ? @Yves Prignon
Un objet connecté ? @Yves Prignon
 
L’internet des choses @Frederic Jourdain
L’internet des choses @Frederic JourdainL’internet des choses @Frederic Jourdain
L’internet des choses @Frederic Jourdain
 

Café Numérique Arlon S03#02: Je code mon blog (EU code week Arlon)

  • 1. Je code mon blog avec Ruby et Ruby on Rails
  • 2. WIFI SSID : OFAC_BUREAU1 Pwd : oFaC-wireless
  • 3. Cédric Bousmanne (@akyrho) Ruby on Rails developer depuis 2008 Freelance depuis 2010 ● Pepper & Koffee (2008 - 2012) ● 2houses.com (fév. 2012 - mars 2014) ● Apptweak.com (depuis mars 2014)
  • 4. Sondage d’opinion Qui a déjà utilisé un langage de programmation ? Si oui, le(s)quel(s) ?
  • 5. Installation de Ruby https://bitnami.com/stack/ruby/installer
  • 6. Ruby vs. Ruby on Rails (RoR) Langage de programmation interpreté, orienté objet Framework construit sur Ruby
  • 7. MVC Modèle : traitement des données, interaction BDD Vue : Présente les résultats, recevoir les actions de l’utilisateur Contrôleur : Réception des événements, enclenche les actions à effectuer
  • 8. MVC par l’exemple Je souhaite envoyer un commentaire ● La vue me présente un formulaire que je rempli ● Le contrôleur réceptionne la requête lorsque j’ai envoyé mon commentaire ● Le modèle valide les informations reçues avant de les enregistrer
  • 9. Philosophie de Ruby on Rails DRY (Don’t Repeat Yourself) Facilité par MVC et la métaprogrammation Convention over configuration Suivre les conventions plutôt que de les préciser
  • 10. Exemple de convention Singulier vs. pluriel Modèle : User Controller : UsersController
  • 11. Vérifier l’installation cd C:/Bitnami/rubystack-2.0.0-20 use_ruby.bat ruby -v -> ruby 2.0.0p481
  • 12. Editeur de texte http://www.sublimetext.com/2
  • 13. Créer un projet Rails gem install rails # gem install <gem> rails new blog # rails new <project> cd blog
  • 14. Architecture d’un projet rails app - assets - controllers - helpers - mailers - models - views
  • 15. Création du premier scafold rails generate scaffold article title:string content: text invoke active_record create db/migrate/20141009165133_create_articles.rb create app/models/article.rb invoke test_unit create test/models/article_test.rb create test/fixtures/articles.yml invoke resource_route route resources :articles invoke scaffold_controller create app/controllers/articles_controller.rb (...)
  • 16. Ce qu’il s’est passé ● Création d’une migration ● Création du modèle ● Création des routes ● Création du controlleur ● Création des vues ● Création des assets (js/css) ● Création des tests
  • 17. Migration de la base de donnée rake db:migrate -- create_table(:articles)
  • 18. Publier un article http://localhost:3000/articles/new
  • 19. Liste des articles http://localhost:3000/articles
  • 20. Les routes fichier config/routes.rb resources :articles Prefix Verb URI Pattern Controller#Action articles GET /articles articles#index POST /articles articles#create new_article GET /articles/new articles#new edit_article GET /articles/:id/edit articles#edit article GET /articles/:id articles#show PUT /articles/:id articles#update DELETE /articles/:id articles#destroy
  • 21. Ajouter la route par défaut config/routes.rb resources :articles root ‘articles#index’
  • 22. Modifier l’index des articles app/views/articles/index.html.erb <% @articles.each do |article| %> <%= render article %> <% end %> <%= link_to 'New Article', new_article_path %> puis rafraîchir la page
  • 23. Création du partiel app/views/articles/_articles.html.erb <section> <h2><%= link_to article.title, article %></h2> <%= article.content %> </section> <hr>
  • 24. Un peu de style app/assets/stylesheets/articles.css.scss https://gist.githubusercontent. com/cedricbousmanne/4b0a4bed2cb46a07a8fd/raw/cd8362e32e917c4648ed47b91870f91b6381e8b6 /articles.css.scss
  • 25. Articles#show app/views/articles/show.html.erb <%= render @article %> puis rafraîchir la page
  • 26. Le layout app/views/layouts/application.html.erb <h1><%= link_to “My awesome blog”, root_path %></h1> <%= yield %> puis rafraîchir la page
  • 27. Un peu d’ordre app/models/article.rb class Article < ActiveRecord::Base default_scope { order(“created_at DESC”) } end puis rafraîchir la page
  • 28. Valider la présence d’attributs app/models/article.rb class Article < ActiveRecord::Base default_scope { order(“created_at DESC”) } validates_presence_of :title validates_presence_of :content end puis tenter d’ajouter un article sans titre et/ou sans contenu
  • 29. Et après ? ● Déporter les actions create, destroy, update dans une interface d’administration sécurisée ● Ajouter un système de commentaire ● Gérer la mise en page des articles ● Gérer l’ajout d’image/vidéo ● Implémenter un système de pagination ● Gestion multi-utilisateur ● Gestion d’état (en ligne/hors ligne) ● ...
  • 30. Les gems Rubygems est gestionnaire de paquets pour ruby (~= plugins) +/- 90,000 gems disponibles
  • 31. Installation d’une gem - En ligne de commande $ gem install devise - Via le Gemfile (recommandé) Ajout d’une ligne dans le Gemfile $ bundle install
  • 32. Gems populaires Devise Authentification / Gestion des utilisateurs Cancan Gestion des permissions Kaminari Pagination Capistrano Automatisation du déploiement Carrierwave Dragonfly Upload / gestion d’image / fichier
  • 33. Pour aller plus loin ● rubygems.org ● ruby-toolbox.com ● railscasts.com ● guides.rubyonrails.org
  • 34. Des questions? twitter : @akyrho mail : cedric@studio-sept.be Merci de votre participation !