<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blogbangbang.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog Bang Bang - Tag - vulgarisation</title>
  <link>http://blogbangbang.com/</link>
  <atom:link href="http://blogbangbang.com/feed/tag/vulgarisation/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Fri, 21 Nov 2008 04:27:39 +0100</pubDate>
  <copyright>cc-by-sa</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>ActionView : Imprimeur de son état</title>
    <link>http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat</link>
    <guid isPermaLink="false">urn:md5:7194a5b66f789ccf00710e3937f348c2</guid>
    <pubDate>Wed, 06 Aug 2008 00:37:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
3ème et dernière partie du Modèle M.V.C. dans Rails, la Vue.
&lt;/p&gt;
&lt;p&gt;
Comme vous l'avez compris dans la partie précédente, Ruby on Rails est capable de produire ou de servir
bien plus que des pages HTML et notamment du XML, du JSON, des images, du PDF... ...
&lt;br /&gt;
Toutefois, Rails a été particulièrement bien prévu pour la génération de HTML et en facilite grandement l'écriture...
&lt;/p&gt;    &lt;p&gt;
  Pour commencer sachez que le langage de templates inclus par défaut dans Rails se nomme &lt;strong&gt;erb&lt;/strong&gt;.
  &lt;br /&gt;
  D'autres existent (Builder, HAML... et ont leur intérêt, mais je m'attarderais ici seulement sur erb).
&lt;/p&gt;

&lt;p&gt;
  Celui-ci vous permet d'intégrer du code Ruby dans votre code HTML comme vous le faites avec les balises &amp;lt;? et ?&amp;gt; de PHP.
&lt;/p&gt;

&lt;p&gt;
  En Ruby deux types de balises existent : 
  &lt;ul&gt; 
    &lt;li&gt;Le code placé entre &amp;lt;% et %&amp;gt; sera interprété, mais pas affiché.&lt;/li&gt;
    &lt;li&gt;Le code placé entre &amp;lt;%= et %&amp;gt; sera interprété et affiché.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
  On écrira par exemple pour afficher les informations d'un étudiant (méthode show) 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&amp;lt;h1&amp;gt;Présentation&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; Prénom: &amp;lt;%= h &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;firstname&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; Nom: &amp;lt;%= h &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;lastname&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;lt;% &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;major&lt;/span&gt;? %&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Age : &amp;lt;%= &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;age&lt;/span&gt; %&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;% &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt; %&amp;gt;&lt;/code&gt;

&lt;p&gt;
  &lt;code&gt;@student&lt;/code&gt; étant la variable passée par notre controller dans la méthode &lt;code&gt;show&lt;/code&gt; dans la partie ActionController de ce tutoriel.
&lt;/p&gt;

&lt;p class=&quot;info&quot;&gt;
  N.B. : Je n'ai pas écrit les méthodes major? et age dans mon modèle Student dans le tutoriel sur ActiveRecord mais l'intégralité de cette 
  mini-application (absolument pas fonctionnelle) est disponible sur &lt;a href=&quot;http://github.com/&quot; hreflang=&quot;en&quot;&gt;Github&lt;/a&gt; sur &lt;a href=&quot;http://github.com/jblanche/tutoriel_ruby_rails/tree/master&quot;&gt;mon dépot&lt;/a&gt;.
  &lt;br /&gt;
  Vous trouverez ce modèle &lt;a href=&quot;http://github.com/jblanche/tutoriel_ruby_rails/tree/master/app/models/student.rb&quot;&gt;ici&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  Vous vous souvenez que l'on avait également une méthode update, censée mettre à jour les données d'un utilisateur provenant d'un formulaire.
&lt;/p&gt;

&lt;p&gt;
  Écrivons ce formulaire : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&amp;lt;% form_for &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |s| %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;lt;%= s.&lt;span style=&quot;color:#9900CC;&quot;&gt;label&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:firstname&lt;/span&gt;, &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Prénom&amp;quot;&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;%= s.&lt;span style=&quot;color:#9900CC;&quot;&gt;text_field&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:firstname&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;lt;%= s.&lt;span style=&quot;color:#9900CC;&quot;&gt;label&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:lastname&lt;/span&gt;, &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Nom&amp;quot;&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;%= s.&lt;span style=&quot;color:#9900CC;&quot;&gt;text_field&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:lastname&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;lt;%= s.&lt;span style=&quot;color:#9900CC;&quot;&gt;label&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:date_of_birth&lt;/span&gt;, &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Date de naissance&amp;quot;&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;lt;%= s.&lt;span style=&quot;color:#9900CC;&quot;&gt;date_select&lt;/span&gt; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:date_of_birth&lt;/span&gt; %&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;lt;%= submit_tag &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Enregistrer&amp;quot;&lt;/span&gt; %&amp;gt;&lt;br /&gt;
&amp;lt;% &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt; %&amp;gt;&lt;/code&gt;

&lt;p&gt;
  Pas mal non &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;Oui ok un coup de CSS ne ferait pas de mal, mais là n'est pas le sujet&lt;/p&gt;

&lt;p&gt;
  En passant le @student à la méthode &lt;code&gt;form_for&lt;/code&gt;, 
  celle-ci sait que le formulaire va modifier l'utilisateur existant et grâce à l'utilisation REST, elle peut aisément générer la balise &lt;code&gt;form&lt;/code&gt;correspondante.
&lt;/p&gt;

&lt;p&gt;
De même, l'utilisation du &lt;code&gt;|s|&lt;/code&gt; permet d'appeler les méthodes de rails pour construire un formulaire ( &lt;code&gt;text_field&lt;/code&gt;, &lt;code&gt;date_select&lt;/code&gt;, &lt;code&gt;hidden_field&lt;/code&gt;...)
en les associant à notre étudiant et donc de générer le code du formulaire avec les propriété &lt;code&gt;name&lt;/code&gt; des &lt;code&gt;input&lt;/code&gt; correctement renseignées.
&lt;/p&gt;

&lt;p&gt;
Regardez plutôt le code généré : 
&lt;/p&gt;

&lt;pre class=&quot;pre_code&quot;&gt;
&amp;lt;form action=&amp;quot;/students/1-Jonathan_Blanchet&amp;quot; class=&amp;quot;edit_student&amp;quot; id=&amp;quot;edit_student_1&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
  &amp;lt;div style=&amp;quot;margin:0;padding:0&amp;quot;&amp;gt;
  &amp;lt;input name=&amp;quot;_method&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;put&amp;quot; /&amp;gt;
  &amp;lt;input name=&amp;quot;authenticity_token&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;c810f8897fcc7bab36a440cb4653b4f87de89d6e&amp;quot; /&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;label for=&amp;quot;student_firstname&amp;quot;&amp;gt;Prénom&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
  &amp;lt;input id=&amp;quot;student_firstname&amp;quot; name=&amp;quot;student[firstname]&amp;quot; size=&amp;quot;30&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;Jonathan&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;

  &amp;lt;label for=&amp;quot;student_lastname&amp;quot;&amp;gt;Nom&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
  &amp;lt;input id=&amp;quot;student_lastname&amp;quot; name=&amp;quot;student[lastname]&amp;quot; size=&amp;quot;30&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;Blanchet&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;
  ...
&amp;lt;/form&amp;gt;
&lt;/pre&gt;

&lt;p&gt;
  Les inputs &lt;code&gt;_method&lt;/code&gt; et &lt;code&gt;authenticity_token&lt;/code&gt; sont automatiquement renseignés par Rails.
&lt;/p&gt;

&lt;p&gt;
  Le premier informe Rails sur le type de requête a utiliser selon la méthode REST (ici PUT) en attendant que les navigateurs 
  implémentent les méthodes &lt;code&gt;PUT&lt;/code&gt; et &lt;code&gt;DELETE&lt;/code&gt; (seulement &lt;code&gt;GET&lt;/code&gt; ET &lt;code&gt;POST&lt;/code&gt; sont actuellement supportées).
&lt;/p&gt;

&lt;p&gt;
  Le deuxième sert à protéger le formulaire contre des ataques extérieures mais comme le premier, vous n'aurez jamais à vous en soucier
&lt;/p&gt;

&lt;p&gt;
  Pour le reste, vous noterez la forme &lt;code&gt;student[propriété]&lt;/code&gt; de tous les inputs qui nous permettra de récupérer un tableau student contenant tous les attributs de notre étudiant.
&lt;/p&gt;

&lt;p&gt;
  Vous noterez également que les propriétés &lt;code&gt;value&lt;/code&gt; ont été automatiquement proprement remplies.
&lt;/p&gt;

&lt;p&gt;
Voilà pour notre formulaire.
&lt;/p&gt;

&lt;img title=&quot;Formulaire généré, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/ActionView_updateForm.png&quot; /&gt;&lt;br /&gt;

&lt;p&gt;
  Vous vous souvenez surement que nos étudiants doivent avoir un nom et un prénom sous peine d'être &amp;quot;invalides&amp;quot; pour ActiveRecord.
&lt;/p&gt;

&lt;p&gt;
  Rajoutons en haut de notre page le code suivant : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&amp;lt;%= error_messages_for &lt;span style=&quot;color:#996600;&quot;&gt;'student'&lt;/span&gt; %&amp;gt;&lt;/code&gt;
&lt;p&gt;
  Si on essaye désormais de sauvegarder notre utilisateur sans nom, nous aurons droit à ceci :
&lt;/p&gt;

&lt;img title=&quot;Erreurs de validation, aoû 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/./.ActionView_errorsDisplay_m.jpg&quot; /&gt;&lt;br /&gt;

&lt;p&gt;Évidemment, tous ces messages sont personnalisables très facilement &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; &lt;/p&gt;

&lt;p&gt;
  Je ne vous parlerais pas ici d'AJAX car même si la facilité de mise en place de fonctionnalités AJAX avec Rails est souvent mise en avant dans les tutoriels,
  le code généré par Rails dans sa version actuelle n'est vraiment pas parfait et ne respecte pas le principe de séparation du contenu, de la présentation et du comportement (HTML - CSS - Javascript)
&lt;/p&gt;

&lt;p&gt;
  Pour les plus curieux, je vous invite à regarder du côté de &lt;a href=&quot;http://ujs4rails.com/&quot; hreflang=&quot;en&quot;&gt;UJS&lt;/a&gt; un plugin permettant d'écrire ce genre de choses : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;apply_behaviour &lt;span style=&quot;color:#996600;&quot;&gt;'.list_item:click'&lt;/span&gt; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |page, element, event|&lt;br /&gt;
&amp;nbsp; element.&lt;span style=&quot;color:#9900CC;&quot;&gt;replace_html&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Deleted.&amp;quot;&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; event.&lt;span style=&quot;color:#9900CC;&quot;&gt;stop&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  Pour en savoir plus sur la notion de &lt;a href=&quot;http://en.wikipedia.org/wiki/Progressive_Enhancement&quot; hreflang=&quot;en&quot;&gt;Progressive Enhancement&lt;/a&gt; (utilisation propre du Javascript) 
  et sur les &lt;a href=&quot;http://alternateidea.com/event-selectors/&quot; hreflang=&quot;en&quot;&gt;CSS-based Selectors&lt;/a&gt;, je vous invite à lire &lt;a href=&quot;http://www.slideshare.net/matta/unobtrusive-javascript-sdrb-2007?src=embed&quot; hreflang=&quot;en&quot;&gt;cette excellente présentation&lt;/a&gt; (c'est court mais excellent) :
&lt;/p&gt;

&lt;p&gt;
  Voilà, c'est terminé pour la partie vue et plus largement, pour cette série d'articles.
&lt;/p&gt;

&lt;p&gt;
  J'espère vous avoir convaincu de l'intérêt de Ruby et de Ruby On Rails pour écrire vos applications Web.
&lt;/p&gt;

&lt;p&gt;
  Pour ma part, je m'étonne encore régulièrement de la facilité à écrire certaines choses en Ruby ! [private joke]Même une mamie Molette blonde pourrait le faire...[/private joke].
&lt;/p&gt;

&lt;p&gt;
  Je vous invite maintenant à me laisser en commentaire, toutes vos questions, réflexions, demandes sur cette série d'articles et/ou sur Ruby/Ruby On Rails en général.
  &lt;br /&gt;
  J'y répondrais avec plaisir et peut-être sous la forme d'une FAQ qui pourrait faire office de billet de clôture de cette série. 
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/91</wfw:commentRss>
      </item>
    
  <item>
    <title>ActionController : Monsieur Circulation</title>
    <link>http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation</link>
    <guid isPermaLink="false">urn:md5:1fc0572cc9cd4717ecf5213e6cbd8326</guid>
    <pubDate>Wed, 30 Jul 2008 23:10:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Dans Rails, ActionController fait la circulation, il va à chaque requête, appeler les modèles nécessaires pour récupérer les données, puis appeler la méthode render pour afficher une vue, un XML... et vous renvoyer le tout.
&lt;/p&gt;
&lt;p&gt;
La politique Rails veut que les controllers soient légers.
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
&amp;quot;Skinny Controller, Fat Model&amp;quot;&lt;br /&gt;
&lt;cite&gt;Jamis Buck, 37signals employee&lt;/cite&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Et ça tombe bien Rails fourni tout ce qu'il faut pour vous simplifier la vie...
&lt;/p&gt;    &lt;p&gt;
  Imaginez par exemple que vous vouliez une interface de gestion de nos étudiants précédemment crées.
  &lt;br /&gt;
  Si nos souhaits se limitent à l'ajout, modification, suppression, le scaffold de Rails ferait l'affaire,
  mais on va ici partir &amp;quot;from scratch&amp;quot; pour vous montrer à quel point tout ceci est aisé.
&lt;/p&gt;

&lt;p&gt;
  On créera alors un Controller StudentsController 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;script/generate controller Students&lt;/code&gt;

&lt;p&gt;
Rails2.1 permet de faire très facilement des controllers dit &amp;quot;Restful&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
  Si vous ne savez pas ce dont il s'agit je vous invite à lire l'excellente traduction de Biologeek d'un article de Softies on Rails :
  &lt;br /&gt;
  &lt;a href=&quot;http://www.biologeek.com/rest,traduction,web-semantique/pour-ne-plus-etre-en-rest-comprendre-cette-architecture/&quot;&gt;Pour ne plus être en REST, comprendre cette architecture&lt;/a&gt;
  &lt;br /&gt;
  et/ou celle-ci de pompage.net :
  &lt;br /&gt;
  &lt;a href=&quot;http://www.pompage.net/pompe/comment-j-ai-explique-rest-a-ma-femme/&quot;&gt;Comment j'ai expliqué REST à ma femme&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Si vous avez lu et compris, vous aurez retenu qu'avec REST on utilise tous les verbes du protocole HTTP et qu'on parle de ressources plutôt que de pages web ou d'images... 
&lt;/p&gt;
&lt;p&gt;
Les ressources, dans notre cas, ce sont des étudiants et voici quelques URLs qui vont nous intéresser 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;GET &amp;nbsp; &amp;nbsp;/students &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;index&amp;quot;&lt;/span&gt;&lt;br /&gt;
POST &amp;nbsp; /students &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;create&amp;quot;&lt;/span&gt;&lt;br /&gt;
GET &amp;nbsp; &amp;nbsp;/students/new &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;new&amp;quot;&lt;/span&gt;&lt;br /&gt;
GET &amp;nbsp; &amp;nbsp;/students/:id/edit &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;edit&amp;quot;&lt;/span&gt;&lt;br /&gt;
GET &amp;nbsp; &amp;nbsp;/students/:id &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;show&amp;quot;&lt;/span&gt;&lt;br /&gt;
PUT &amp;nbsp; &amp;nbsp;/students/:id &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;update&amp;quot;&lt;/span&gt;&lt;br /&gt;
DELETE /students/:id &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt;=&amp;gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;destroy&amp;quot;&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  Vous aurez compris que pour afficher un utilisateur on fera /students/:id, 
  mais et c'est là où REST intervient, on utilisera la même adresse pour le supprimer et le modifier.
&lt;/p&gt;
&lt;p&gt;
  En effet une ressource = une URI, donc un utilisateur =&amp;gt; &amp;quot;/students/:id&amp;quot;
&lt;/p&gt;

&lt;p&gt;
  Par contre, le type de requête HTTP, respectivement GET, DELETE ET PUT nous informera sur ce que l'on souhaite faire.
&lt;/p&gt;

&lt;p&gt;
  Avec Rails, les actions appelées sont les méthodes publiques des controllers, écrivons donc la méthode qui va afficher un utilisateur 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; show&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; = Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  &lt;strong&gt;Et voilà...&lt;/strong&gt;
  &lt;br /&gt;
  Quoi c'est tout :D
&lt;/p&gt;
&lt;p&gt;
Oui, pour l'instant cela peut suffire, en effet Rails a récupéré notre ressource (l'utilisateur désiré) grâce au find et par défaut, il va appeler la méthode render avec la vue correspondante (show) dans le dossier des vues.
&lt;/p&gt;

&lt;p&gt;
  Cette dernière aura accès aux variables d'instance de notre classe et donc à l'objet @student et toutes ses propriétés.
&lt;/p&gt;

&lt;p&gt;
  Essayons maintenant d'écrire la méthode nécessaire à la modification (update) d'un utilisateur.
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; update&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; = Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;update_attributes&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:student&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; redirect_to &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;  
  Dans la première ligne, je récupère l'étudiant à créer.
  &lt;br /&gt;
  Dans la seconde j'update ses attributs (donc propriétés) avec les paramètres passés par le formulaire.
  &lt;br /&gt;
  Dans la dernière je redirige l'utilisateur vers le student modifié (cela appellera la méthode show précédemment créée)
&lt;/p&gt;

&lt;p&gt;
  En réalité il faudrait gérer le fait que la sauvegarde se soit ou non bien passée, cela donnerait donc : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; update&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; = Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;update_attributes&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:student&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; redirect_to&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;@student&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; render &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:action&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;edit&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  C'est presque la même chose sauf que si la sauvegarde n'a pas fonctionné, on revient sur la page d'édition.
&lt;/p&gt;

&lt;p&gt;
  Voilà pour la version HTML, mais si vous avez compris REST, vous savez que l'on aimerait pouvoir 
  avoir d'autre représentation de notre ressource qu'une page web ! 
  &lt;br /&gt;
  Pourquoi pas par exemple,  une représentation XML que l'on pourrait passer à un webservice distant ou je ne sais quel autre usage.
&lt;/p&gt;

&lt;p&gt;
Ré-écrivons notre méthode show dans ce but 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; show&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; = Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:id&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; respond_to &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |format|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;format&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;html&lt;/span&gt; &lt;span style=&quot;color:#008000; font-style:italic;&quot;&gt;# show.html.erb&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;format&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;xml&lt;/span&gt; &amp;nbsp;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; render &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:xml&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  Et voilà, notre controller répondra désormais à la demande générée.
  &lt;br /&gt;
  Si vous lui demandez du HTML, celui là réagira comme précédemment, si vous le voulez en XML, il exécutera la ligne : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;format&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;xml&lt;/span&gt; &amp;nbsp;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; render &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:xml&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;  

&lt;p&gt;
  et renverra donc notre objet student converti en XML.
&lt;/p&gt;

&lt;p&gt;
Vous voulez discuter avec une application Flash/Flex/AIR..., installez &lt;a href=&quot;http://www.rubyamf.org/&quot; hreflang=&quot;en&quot;&gt;RubyAMF&lt;/a&gt; 
(l'équivalent Ruby de &lt;a href=&quot;http://www.amfphp.org/&quot; hreflang=&quot;en&quot;&gt;AMFPHP&lt;/a&gt;) et il vous suffira de rajouter : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;format&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;amf&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; render &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:amf&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@student&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  Et voilà vous avez côté ActionScript votre objet tout chaud sans nécessité de désérialisation.
  &lt;br /&gt;
  Et vous n'avez presque rien eu à faire côté Rails et finalement, c'est normal, la logique et la ressource sont les mêmes, seul le rendu change ! 
&lt;/p&gt;

&lt;p&gt;
  Comme vous pouvez le voir, ActionController se débrouille donc très bien pour faire la circulation entre la vue et les modèles. 
&lt;/p&gt;


&lt;img src=&quot;http://blogbangbang.com/public/./.carrefour_m.jpg&quot; alt=&quot;carrefour&quot; style=&quot;margin: 0 auto; display: block;&quot; title=&quot;Spaghetti Junction, Chris Gin&quot; /&gt;

&lt;p&gt;
  Une des rares autres tâches qui incombe au controller est le contrôle des accès, 
  si vous souhaitez vérifier que l'utilisateur connecté peut accéder à telle ou telle ressource, c'est à lui de s'en charger.
&lt;/p&gt;

&lt;p&gt;
  Imaginons dans notre exemple, que les étudiants puissent consulter les informations les concernant, 
  mais que seul l'intendance puisse les éditer, ajouter, supprimer.
&lt;/p&gt;

&lt;p&gt;
  Ajoutons à notre controller la ligne suivante : 
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;before_filter &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:authenticate&lt;/span&gt; , &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:exept&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:index&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:show&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  Cela signifie qu'avant toutes les méthodes sauf index et show,
  on exécutera la méthode authenticate et que l'on ne fera la suite que si cette méthode renvoi &lt;code&gt;true&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
On peut donc rajouter à la fin de notre controller la méthode authenticate :
&lt;/p&gt;

&lt;code class=&quot;Ruby&quot;&gt;private&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; authenticate&lt;br /&gt;
&amp;nbsp; authenticate_or_request_with_http_basic &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |username, password|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; username == &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt; &amp;amp;&amp;amp; password == &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;bar&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;
  On notera que la méthode a été placée après le mot clé private afin de signifier 
  que celle-ci n'est pas une action exécutable par le navigateur.
&lt;/p&gt;

&lt;p&gt;
  Notre action va ouvrir une boite de dialogue (si l'utilisateur n'est pas encore authentifier)
  nous demandant notre login et mot de passe et renverra true si et seulement si ceux-ci sont &amp;quot;foo&amp;quot; et &amp;quot;bar&amp;quot;
  &lt;br /&gt;
  N.B. : Evidement, en réalité, cette vérification s'effectuerait en base de donnée &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;
  Et voilà, désormais seul les personnes connaissant les logins et mot de passe ont accès à l'intégralité de l'application. 
&lt;/p&gt;

&lt;p&gt;
Ce sera tout pour ce soir, nous avons désormais vu &lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;comment écrire&lt;/a&gt; &lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;du Ruby&lt;/a&gt;, puis, comment fonctionnent les parties &lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;Model&lt;/a&gt; et Controller de Rails.
&lt;/p&gt;

&lt;p&gt;
  Il ne nous reste donc plus qu'une partie à aborder : les vues. 
  &lt;br /&gt;
  A bientôt pour ce dernier chapitre. 
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/89</wfw:commentRss>
      </item>
    
  <item>
    <title>ActiveRecord : Vos données, c'est mon dada.</title>
    <link>http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada</link>
    <guid isPermaLink="false">urn:md5:95127ed41e1bfcfd8b64485c06e3940a</guid>
    <pubDate>Fri, 25 Jul 2008 22:24:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Nous allons donc commencer par le M du M.V.C., le modèle :
&lt;br /&gt;
ActiveRecord c'est le gestionnaire de vos données et donc la plupart du temps, de votre Base de données dans Rails
&lt;br /&gt;
Ça tombe bien, la partie Base de données est surement la plus magique de Rails...
&lt;/p&gt;    &lt;p&gt;
Question à 100 piasses : Qui aime écrire du SQL ?
&lt;br /&gt;
Ceux qui ont répondu OUI peuvent s'en aller :D
&lt;/p&gt;
&lt;p&gt;
En effet que ce soit à la création ou au traitement de vos données, vous n'écrirez pratiquement jamais de SQL avec Rails.
&lt;br /&gt;
Mais alors comment on les crée nos bases ?
&lt;/p&gt;
&lt;p&gt;
La réponse de Rails s'appelle les migrations.
&lt;br /&gt;
Quand vous voulez créer une nouvelle table, vous créez (ou faite faire à Rails) une nouvelle migration, celle-ci comporte deux méthodes &amp;quot;up&amp;quot; et &amp;quot;down&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
De cette manière, il sera aisé pour Rails de revenir en arrière si finalement votre implémentation de la base ne vous plait pas.
&lt;/p&gt;
&lt;p&gt;
La création de ce modèle s'écrira : (à exécuter en console ou dans l'interface de votre IDE)
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;script/generate model Student firstname:&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;string&lt;/span&gt; lastname:&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;string&lt;/span&gt; date_of_birth:date section:&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;string&lt;/span&gt; promotion_id:&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;integer&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
On précise que l'on veut créer un modèle, on donne ensuite son nom, puis les colonnes de la base de données avec leur types.
&lt;/p&gt;
&lt;p&gt;
En exécutant ceci, vous créer tous les fichiers de votre modèle dont une migration ressemblant à ceci, dans le up, on crée notre table, dans le down on la supprime.
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;class&lt;/span&gt; AddStudents &amp;lt; &lt;span style=&quot;color:#6666ff; font-weight:bold;&quot;&gt;ActiveRecord::Migration&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;up&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; create_table &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:students&lt;/span&gt; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;do&lt;/span&gt; |t|&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;string&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:firstname&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;string&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:lastname&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t.&lt;span style=&quot;color:#9900CC;&quot;&gt;date&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:date_of_birth&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;string&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:section&lt;/span&gt; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#008000; font-style:italic;&quot;&gt;#S pour Scientifique, L pour Littéraire, ES pour Economique et Social&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t.&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;integer&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:promotion_id&lt;/span&gt; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; t.&lt;span style=&quot;color:#9900CC;&quot;&gt;timestamps&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color:#0000FF; font-weight:bold;&quot;&gt;self&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;down&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; drop_table &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:students&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Plutôt simple n'est-ce pas ? Et avec ça Rails s'adaptera à votre base de données, qu'elle soit Mysql, Postgresql, Oracle, SQLite...
&lt;/p&gt;
&lt;p&gt;
Et si demain vous changez Mysql pour Postgres, il suffira de faire un petit
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;rake db:migrate&lt;/code&gt;
&lt;p&gt;
pour récréer toutes vos tables (En réalité, Ruby éxécutera à la suite toutes les méthodes up de vos migrations).
&lt;/p&gt;
&lt;p&gt;
Vous aurez surement remarqué le promotion_id, on supposera dans ce tutorial que l'on a ailleurs une table Promotion avec notamment l'année de la promo et que ce champ servira à faire le lien
entre un étudiant et sa promotion.
&lt;/p&gt;
&lt;p&gt;
Ok, mais cette liaison elle est définie où ? On a pas écrit les contraintes dans notre SQL là ?
&lt;br /&gt;
Oui c'est vrai, allons donc modifier nos modèles pour changer ça.
Et puisque nous y somme, nous indiquerons qu'un étudiant doit forcément avoir un nom et un prénom (lignes not null en quelque sorte)
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;class&lt;/span&gt; Promotion &amp;lt; &lt;span style=&quot;color:#6666ff; font-weight:bold;&quot;&gt;ActiveRecord::Base&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; has_many &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:students&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;br /&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;class&lt;/span&gt; Student &amp;lt; &lt;span style=&quot;color:#6666ff; font-weight:bold;&quot;&gt;ActiveRecord::Base&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; belongs_to &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:promotion&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; validates_presence_of &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:firstname&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; validates_presence_of &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:lastname&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Difficile de faire plus clair non ?
&lt;/p&gt;
&lt;p&gt;
Oui mais dans le code après comment ça se passe ?
&lt;/p&gt;
&lt;p&gt;
Imaginez que vous souhaitiez récupérer tous les étudiants (en gros un &lt;code&gt;SELECT * FROM students&lt;/code&gt;)
&lt;br /&gt;
vous ferez simplement
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;all&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Si vous voulez récupérer la ligne correspondant à la promotion de 2006 :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;promo_2006 = Promotion.&lt;span style=&quot;color:#9900CC;&quot;&gt;find_by_year&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#006666;&quot;&gt;2006&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Les étudiants de cette promo :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;promo_2006.&lt;span style=&quot;color:#9900CC;&quot;&gt;students&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Allez compliquons un peu, il n'y a pas de &lt;code&gt;where&lt;/code&gt;, pas de conditions dans nos requête actuelles, ajoutons les :
&lt;/p&gt;
&lt;p&gt;
Disons que l'on ne veut récupérer que les étudiants Scientifiques.
&lt;br /&gt;
Ajoutons à notre modèle la ligne suivante :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;named_scope &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:scientists&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:conditions&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt;:section =&amp;gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;S&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
En francais : on nommera &amp;quot;scientists&amp;quot; les étudiants ayant comme section &amp;quot;S&amp;quot;
&lt;br /&gt;
On peut désormais écrire
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;scientists&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
pour récupérer tous les étudiants scientifiques
&lt;/p&gt;
&lt;p&gt;
Ces &lt;code&gt;named_scope&lt;/code&gt; sont géniaux, ajoutons-en deux pour trouver les étudiant majeurs et mineurs.
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;named_scope &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:majors&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:conditions&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;'date_of_birth &amp;lt; ?'&lt;/span&gt;, &lt;span style=&quot;color:#006666;&quot;&gt;18&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;years&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;ago&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
named_scope &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:minors&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:conditions&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;'date_of_birth &amp;gt; ?'&lt;/span&gt;, &lt;span style=&quot;color:#006666;&quot;&gt;18&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;years&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;ago&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
On peut maintenant faire dans tous nos Controllers :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;majors&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Pour récupérer les étudiants majeurs.
&lt;/p&gt;
&lt;p&gt;
Et si l'on veut, dans la promo 2006, les étudiants à la fois majeurs et scientifiques :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;promo_2006.&lt;span style=&quot;color:#9900CC;&quot;&gt;students&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;majors&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;scientists&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Et le tour est joué !
&lt;br /&gt;
Incroyable non ? (qui me l'écrit en SQL avec la jointure et tout et tout ?)
&lt;/p&gt;
&lt;p&gt;
C'est le moment de citer DHH  :
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
Beautiful code makes happy programmers.&lt;br /&gt;
&lt;cite&gt;David Heinemeier Hansson, Créateur de Rails&lt;/cite&gt;
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Voilà pour les requêtes, pour créer un enregistrement, c'est tout aussi simple :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;jb = Student.&lt;span style=&quot;color:#9900CC;&quot;&gt;create&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:firstname&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Jonathan&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:lastname&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Blanchet&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
La création précédente fonctionnera puisqu'elle remplie bien les conditions décrites précédemment (un étudiant à forcément un nom et un prénom).
&lt;/p&gt;
&lt;p&gt;
Allez un dernier exemple pour la route, imaginez que la personne utilisant cette application souhaite,
dans l'interface de création des utilisateurs, pouvoir les lier à une promotion en tapant simplement l'année de celle-ci.
&lt;/p&gt;
&lt;p&gt;
Côté modèle, cela veut dire qu'il va falloir trouver la promotion si elle existe, la crée sinon.
&lt;/p&gt;
&lt;p&gt;
Une fois traduit en Rails cela donne :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;Promotion.&lt;span style=&quot;color:#9900CC;&quot;&gt;find_or_create_by_year&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;params&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:year&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Simple non &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Allez je vous attend pour la suite, on verra le rôle du Controller.
&lt;/p&gt;
&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;
ActiveRecord : Vos données, c'est mon dada.&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/87</wfw:commentRss>
      </item>
    
  <item>
    <title>Rails, la locomotive de Ruby !</title>
    <link>http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby</link>
    <guid isPermaLink="false">urn:md5:3767570209b7ca63d0e55f91a11e7c04</guid>
    <pubDate>Fri, 25 Jul 2008 22:20:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
On a vu dans les deux &lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;articles&lt;/a&gt; &lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;précédents&lt;/a&gt; les rudiments de la syntaxe Ruby.
&lt;br /&gt;
Normalement, vous êtes déjà séduit par ces débuts, mais vous n'avez encore rien vu !
&lt;br /&gt;
Alors ? Ce Ruby on Rails, qu'est ce donc ?
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Rails is the killer app for Ruby.&lt;br /&gt;
&lt;cite&gt;Yukihiro Matsumoto, Createur de Ruby&lt;/cite&gt;
&lt;/p&gt;
&lt;/blockquote&gt;    &lt;p&gt;
Ruby on Rails, ou Rails, en fait, est un framework dédié au développement d'application Web.
&lt;br /&gt;
Un framework, c'est selon Wikipedia, un ensemble de bibliothèques, d'outils et de conventions permettant le développement d'applications.
&lt;br /&gt;
Ceux-ci permettent donc de donner un socle commun à toutes vos applications et en facilite du même coup le développement et la maintenance.
&lt;/p&gt;
&lt;p&gt;
Rails a été à l'origine développé pour les besoins de la société américaine 37signals qui devant le succès et l'engouement remporté par l'application au sein de son activité, a décidé d'en extraire un framework qu'elle &amp;quot;donnerait&amp;quot; à la communauté du logiciel libre.
&lt;/p&gt;
&lt;p&gt;
Rails suit les principes déjà énoncés dans les articles sur Ruby et y ajoute deux grandes règles :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;La convention plutôt que la configuration&lt;/strong&gt;&lt;br /&gt;
Le principal défaut des frameworks Java était souvent leur configuration au travers de 18 fichiers XML tous plus flous les uns que les autres !
Avec Rails, c'est tout l'inverse : votre table s'appelle Students, votre modèle s'appellera Student...
C'est également pour cette raison que Rails vient avec une architecture de fichiers et de dossiers bien précise, l'application ira dans app, les tests dans test...
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DRY ou Don't Repeat Yourself&lt;/strong&gt;&lt;br /&gt;
Le code doit être écrit de façon à éviter toute redondance qui compliquerait les phases de maintenances, de test, de debuggage...
Les modifications doivent se faire à un endroit et n'impacter que les objets concernés.
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
En plus de ces deux règles, Rails comme la majorité des frameworks dédié au Web s'articule autour du modèle MVC ou Modèle-Vue-Controller.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les modèles sont les classes assurent la gestion des données, ils sont habituellement liés à la base de données.&lt;/li&gt;
&lt;li&gt;Les vues déterminent comment sont affichées les informations à l'utilisateur. Il s'agit généralement d'une combinaison de code HTML et de Ruby.&lt;/li&gt;
&lt;li&gt;Les contrôleurs réagissent aux requêtes utilisateur et répondent d'ordinaire à l'aide des vues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Pour faire simple, voici le chemin d'une requête web avec Rails : &lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;requete_rails.png, juil 2008&quot; style=&quot;margin: 0 auto; display: block;&quot; alt=&quot;&quot; src=&quot;http://blogbangbang.com/public/./.testSchema_m.jpg&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Vous appelez une page, celle-ci correspond à une méthode, dans un controller.&lt;/li&gt;
&lt;li&gt;Celui-ci appelle un ou plusieurs modèles pour récupérer les informations nécessaires pour vous répondre.&lt;/li&gt;
&lt;li&gt;Il envoie ces données données à la vue qui va interpréter et renvoyer le code HTML (ou autre) désiré.&lt;/li&gt;
&lt;li&gt;La réponse vous est envoyée. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
On trouve partout sur internet, des tutoriels vous expliquant comment construire un blog fonctionnel en 10mn, un site en une demi-heure et Youtube en 2 jours &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;br /&gt;
Ces tutoriels, mêmes s'ils incitent souvent les débutants à essayer Ruby et Rails, restent trop basique et trop axé sur un exemple particulier pour vraiment montrer les avantages de Rails.
&lt;br /&gt;
Je vais donc pour ma part vous parler de chaque grande partie de Rails (selon le MVC) en vous montrant ce qui selon moi, fait la différence entre Rails et le reste du monde &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
On commence tout de suite avec celui qui va gérer vos données, le modèle de Rails, nommé ActiveRecord, &lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;suivez-moi...
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;
Rails, la locomotive de Ruby !&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/86</wfw:commentRss>
      </item>
    
  <item>
    <title>Un peu de syntaxe Ruby...</title>
    <link>http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby</link>
    <guid isPermaLink="false">urn:md5:b321fcff2130283e52e18ff69d7bb514</guid>
    <pubDate>Sat, 19 Jul 2008 22:05:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Vous avez apprécier &lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;l'article précédent&lt;/a&gt; ?
&lt;br /&gt;
Alors, essayons d'écrire un peu plus de Ruby...
&lt;/p&gt;
&lt;p class=&quot;info&quot;&gt;
Pour commencer, si vous souhaitez tester ces exemples sur votre poste je vous invite à installer Ruby sur votre machine.&lt;br /&gt;
Pour les autres, vous pouvez tester &lt;a href=&quot;http://tryruby.hobix.com/&quot; hreflang=&quot;en&quot;&gt;en ligne&lt;/a&gt; ou vous contenter de lire :).
&lt;br /&gt;&lt;br /&gt;
Pour l'installation, les Linuxiens se débrouillerons avec leur gestionnaire de paquets pour installer les paquets ruby irb et rdoc.&lt;br /&gt;
&lt;br /&gt;
Pour les utilisateurs de Windows, je vous invite à utiliser le &lt;a href=&quot;http://Rubyforge.org/frs/?group_id=167&quot; hreflang=&quot;en&quot;&gt;one-click install&lt;/a&gt; qui vous donnera
tout ce qu'il faut pour commencer.
&lt;/p&gt;    &lt;p&gt;
Comme je le disais dans le précédent article, la syntaxe de Ruby peut étonner au premier abord, mais sa lisibilité en est fortement améliorée.
Regardons ces quelques lignes tirées ou inspirés du fameux &amp;quot;&lt;a href=&quot;http://poignantguide.net/ruby/&quot; hreflang=&quot;en&quot;&gt;Why's (poignant) guide to Ruby&lt;/a&gt;&amp;quot; et de
&lt;a href=&quot;http://www.softiesonrails.com/&quot; hreflang=&quot;en&quot;&gt;Softiesonrails&lt;/a&gt; pour s'en convaincre.
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#006666;&quot;&gt;5&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;times&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Hello!&amp;quot;&lt;/span&gt; &lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Essayons de lire ce bout de code en anglais, &lt;strong&gt;Five times print Hello&lt;/strong&gt;, je vous laisse deviner ce qu'il fait &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Un autre exemple :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;exit&lt;/span&gt; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;unless&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;restaurant&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;include&lt;/span&gt;? &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;aura&amp;quot;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
En anglais lu : &lt;strong&gt;Exit unless restaurant includes aura&lt;/strong&gt;
&lt;br /&gt;
Avec cette ligne, notre programme va se terminer (exit) sauf si (unless) le mot &amp;quot;restaurant&amp;quot; contient (include?) le mot &amp;quot;aura&amp;quot;.
&lt;/p&gt;
&lt;p&gt;
On retiendra de cette ligne le &lt;code&gt; unless &lt;/code&gt;, assez rare dans les autres langages qui est en
fait l'inverse du &lt;code&gt;if&lt;/code&gt; ainsi que l'utilisation très judicieuse du point d'interrogation dans le nom
de méthode include? pour signifier une question, un test (est-ce que &amp;quot;restaurant&amp;quot; contient &amp;quot;aura&amp;quot; &lt;strong&gt;?&lt;/strong&gt;.
&lt;br /&gt;
Vous aurez déduis que les méthodes ce terminant par un point d'interrogation retourneront normalement &lt;code&gt;true&lt;/code&gt; ou &lt;code&gt;false&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
Allez écrivons maintenant une petite méthode (ou fonction si vous préférez, mais normalement en Programmation Orientée Objet on dit méthode).
&lt;/p&gt;
&lt;p&gt;
Imaginez un appareil photo, écrivons la méthode qui prend une photo.
&lt;br /&gt;
Celle-ci vérifiera si l'appareil est allumé et s'il reste de la place sur la carte mémoire.
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; capture_clicked&lt;br /&gt;
&amp;nbsp; capture_image &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@camera&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;on&lt;/span&gt;? &amp;amp;&amp;amp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@camera&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;memory_available&lt;/span&gt;? &lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Comme vous pouvez le constater, une méthode Ruby s'écrit avec &lt;code&gt;def&lt;/code&gt; et &lt;code&gt;end&lt;/code&gt;.
&lt;br /&gt;
Pour le reste c'est encore une fois plutôt standard, vous remarquerez toutefois qu'en Ruby, on peut écrire la clause &lt;code&gt;if&lt;/code&gt; à la fin de l'instruction ce qui améliore la lisibilité.
&lt;br /&gt;
En effet, ce que l'on veut faire dans notre cas (99% du temps) c'est &lt;strong&gt;capture_screen&lt;/strong&gt;,
il est donc logique de le voir tout dès le début de la méthode et pas encadré par un &lt;code&gt;if&lt;/code&gt; comme ce serait le cas dans beaucoup d'autres langages.
&lt;/p&gt;
&lt;p&gt;
Imaginons maintenant qu'on vous demande une méthode qui prendrai des photos en mode rafale tant qu'il y a de place, vous écrieriez alors simplement :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; rafale&lt;br /&gt;
&amp;nbsp; capture_image &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@camera&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;memory_available&lt;/span&gt;?&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Allez un dernier exemple pour la route, écrivons une petite classe Etudiant.
&lt;br /&gt;
Celui-ci aura un nom, un prénom et un âge.
&lt;br /&gt;
on a déjà tous écrit un truc du style avec une classe avec trois propriétés et leurs &amp;quot;getters&amp;quot;.
&lt;/p&gt;
&lt;code class=&quot;PHP&quot;&gt;&amp;lt;br /&amp;gt;class Etudiant&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$prenom&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$nom&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$age&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; Etudiant&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;prenom, nom, age&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;prenom&lt;/span&gt; = prenom;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;nom&lt;/span&gt; = nom;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;age&lt;/span&gt; = age;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; prenom&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;prenom&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; nom&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;nom&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; age&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;age&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
C'est moche n'est-ce pas !
&lt;br /&gt;
Et bien en Ruby cela nous donne :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;class&lt;/span&gt; Etudiant&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; attr_reader &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:prenom&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:nom&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:age&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; initialize&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;prenom, nom, age&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@prenom&lt;/span&gt;, &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@nom&lt;/span&gt;, &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@age&lt;/span&gt; = prenom, nom, age&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Alors, vous voyez bien que le mot sexy n'était pas exagéré pour décrire la syntaxe de Ruby &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
Pour information, si l'on veut aussi les &amp;quot;setters&amp;quot;, en PHP ce sera trois nouvelles fonctions en Ruby on remplacera juste :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;attr_reader &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:prenom&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:nom&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:age&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
par
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;attr_accessor &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:prenom&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:nom&lt;/span&gt;, &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:age&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
et si l'on veut mettre un peu de logique dans le getter, pour récupérer le prénom avec une majuscule au début, il suffira de l'écrire à la main
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; prenom&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@prenom&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;capitalize&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Vous vous demandez quand même surement ce que sont ces &lt;code&gt;@&lt;/code&gt; que l'on peut voir devant certaines variables.
&lt;br /&gt;
Ce signe sert à distinguer les variables d'instances (les attributs d'un objet) des variables locales (à une méthode ou autre).
&lt;br /&gt;
Il existe également des variables notées &lt;code&gt;@@ma_variable&lt;/code&gt;, celles-ci sont des variables de classes, elles sont donc attachées à la classe et non à son instance.
&lt;/p&gt;
&lt;p&gt;
Regardez ce petit exemple pour mieux comprendre :
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;class&lt;/span&gt; Voiture&lt;br /&gt;
&amp;nbsp; @@nom = &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Renault Clio&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; attr_accessor &lt;span style=&quot;color:#ff3333; font-weight:bold;&quot;&gt;:nom&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; initialize&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;nom&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@nom&lt;/span&gt; = nom&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; nom&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#0066ff; font-weight:bold;&quot;&gt;@nom&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;capitalize&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;def&lt;/span&gt; se_presente&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color:#CC0066; font-weight:bold;&quot;&gt;puts&lt;/span&gt; &lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;Je suis une &amp;quot;&lt;/span&gt;+@@nom+&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot; surnomée &amp;quot;&lt;/span&gt;+nom&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color:#9966CC; font-weight:bold;&quot;&gt;end&lt;/span&gt;&lt;/code&gt;
&lt;br /&gt;
&lt;code class=&quot;Ruby&quot;&gt;ma_voiture = Voiture.&lt;span style=&quot;color:#9900CC;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;titine&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
ma_voiture.&lt;span style=&quot;color:#9900CC;&quot;&gt;se_presente&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Cet exemple va afficher &lt;br /&gt;
&lt;strong&gt;Je suis une Renault Clio surnommée Titine.&lt;/strong&gt; &lt;br /&gt;
Vous remarquerez au passage que je peux appeler les méthodes sans les parenthèses,
celles-ci sont optionnelles et les conventions veulent qu'on ne les écrive pas quand il n'y a pas de paramètres.
&lt;/p&gt;
&lt;p&gt;
Pour résumer pour les habitués à PHP :
&lt;br /&gt;
&lt;code&gt;nom&lt;/code&gt; équivaut à &lt;code&gt;$nom&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@nom&lt;/code&gt; équivaut à &lt;code&gt;$this-&amp;gt;nom&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;@@nom&lt;/code&gt; équivaut à &lt;code&gt;self::$nom&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Alors, c'est qui qui a la plus &lt;del&gt;grosse&lt;/del&gt; belle syntaxe ?
&lt;br /&gt;
Voilà pour ce soir, j'espère que vous avez encore appris plein de belles choses sur Ruby
[troll]et je m'excuse d'avance pour les larmes versées lors de votre prochaine tentative de codage en PHP, ActionScript, Cobol ou Fortran :D [/troll] &lt;/p&gt;
&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;
Un peu de syntaxe Ruby...&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/85</wfw:commentRss>
      </item>
    
  <item>
    <title>Ruby, c'est quoi comme langage ?</title>
    <link>http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage</link>
    <guid isPermaLink="false">urn:md5:225d4351f86913d3c41775127618029e</guid>
    <pubDate>Tue, 15 Jul 2008 22:35:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>&lt;p&gt;
Let's go...
&lt;/p&gt;
&lt;p&gt;
Dans Ruby on Rails, il y a avant tout Ruby !
&lt;/p&gt;
&lt;p&gt;
Ruby c'est un langage informatique, au même titre que PHP, Python, Java, C, C++, l'ActionScript...
&lt;/p&gt;
&lt;p&gt;
Parmis tous ces langages, trois familles existent, les langages compilés, les langages interprétés et les langages intermédiaires.
&lt;br /&gt;
Pour information voici comment se répartissent certains langages que vous connaissez surement :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Langages compilés : C, C++...&lt;/li&gt;
&lt;li&gt;Langages interprétés : PHP, PERL...&lt;/li&gt;
&lt;li&gt;Langages intermédiaires : Java, ActionScript...&lt;/li&gt;
&lt;/ul&gt;    &lt;p&gt;
Pour en savoir plus sur les différences entre ces trois familles de langages, je vous invite à lire &lt;a href=&quot;http://www.commentcamarche.net/langages/langages.php3#interprete&quot;&gt;l'explication de commentcamarche.net&lt;/a&gt; dont la vulgarisation est excellente (je m'étais lancé dans une explication, mais faire clair, simple et concis à ce sujet est vraiment compliqué).
Puisque que c'est de lui qu'il s'agit, Ruby est un langage interprété, donc de la même famille que PHP, c'est d'ailleurs lui que j'utiliserais dans les comparaisons à venir puisqu'il est surement le langage interpreté le plus connu (au moins des lecteurs de ce blog).
&lt;/p&gt;
&lt;p&gt;
D'ailleurs contrairement à la croyance qui veut que Ruby soit un truc tout nouveau qui tombera bientôt à l'eau, Ruby est en fait aussi &amp;quot;vieux&amp;quot; que PHP, leur première publication ayant toutes les deux eu lieu en 1995.
&lt;/p&gt;
&lt;p&gt;
Attention toutefois, Ruby est très différent de PHP !
&lt;/p&gt;
&lt;h3&gt;Pourquoi ?&lt;/h3&gt;
&lt;h4&gt; Orienté Web / Peut tout faire &lt;/h4&gt;
&lt;p&gt;
PHP a été crée par un développeur Web pour le développement Web, les bases de PHP viennent de la nécessité pour son créateur &lt;a href=&quot;http://fr.wikipedia.org/wiki/Rasmus_Lerdorf&quot;&gt;Rasmus Lerdorf&lt;/a&gt;, d'enregistrer la fréquentation sur son CV...
&lt;/p&gt;
&lt;p&gt;
Ruby quant à lui, a été crée par &lt;a href=&quot;http://fr.wikipedia.org/wiki/Yukihiro_Matsumoto&quot;&gt;Yukihiro Matsumotow&lt;/a&gt; dit &amp;quot;Matz&amp;quot; en s'inspirant notamment de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Perl_%28langage%29&quot;&gt;PERL&lt;/a&gt; et &lt;a href=&quot;http://fr.wikipedia.org/wiki/Smalltalk&quot;&gt;Smalltalk&lt;/a&gt;, cela veut principalement dire que Ruby a été écrit pour être un langage applicatif &amp;quot;à tout faire&amp;quot; en allant du petit script de classement de vos images aux bibliothèques d'interfaces graphiques (il est en cela comparable au C, C++, Java...).
&lt;/p&gt;
&lt;h4&gt; Non-Objet / Objet &lt;/h4&gt;
&lt;p&gt;
Dans un langage objet, les objets répondent à des messages.
&lt;br /&gt;
&lt;strong&gt;exemple&lt;/strong&gt; : l'objet maVoiture reçoit un message lui demandant d'avancer donne
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;ma_voiture.&lt;span style=&quot;color:#9900CC;&quot;&gt;avance&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
PHP, lui, n'est pas un langage (entièrement) orienté objet.
&lt;br /&gt;
D'ailleurs à l'origine PHP n'est pas du tout un langage objet.
&lt;br /&gt;
Même si depuis la version 5, tout cela a bien évolué.
&lt;/p&gt;
&lt;p&gt;
Toutefois, en PHP, pour mettre en majuscule un mot ou une phrase, on écrira :
&lt;/p&gt;
&lt;code class=&quot;PHP&quot;&gt;&lt;a href=&quot;http://www.php.net/strtoupper&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;strtoupper&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;jonathan&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
On voit bien ici que &amp;quot;l'objet&amp;quot; traité est passé à une méthode au lieu de recevoir un message.
&lt;/p&gt;
&lt;p&gt;
Si vous n'avez pas encore compris, regardez ce que cela donne en Ruby.
&lt;/p&gt;
&lt;code class=&quot;Ruby&quot;&gt;&lt;span style=&quot;color:#996600;&quot;&gt;&amp;quot;jonathan&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color:#9900CC;&quot;&gt;uppercase&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
Ici c'est bien l'objet (le string) qui reçoit le message lui indiquant de se mettre en majuscule.
&lt;/p&gt;
&lt;p&gt;
Une des particularités de Ruby est qu'absolument tout (ou presque) est Objet.
&lt;/p&gt;
&lt;p&gt;
C'est la raison pour laquelle j'ai pu écrire &amp;quot;jonathan&amp;quot;.uppercase() sans avoir auparavant créé une instance de String...
&lt;/p&gt;
&lt;p&gt;
Ruby &amp;quot;comprend&amp;quot; automatiquement que ce qui est entre deux guillemets est un string et répond donc aux méthodes de cette classe.
&lt;/p&gt;
&lt;p&gt;
On touche là une autre particularité de Ruby, le &amp;quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Duck_Typing&quot; hreflang=&quot;en&quot;&gt;Duck Typing&lt;/a&gt;&amp;quot; ou &amp;quot;Typage Canard&amp;quot; (si ça marche comme un canard et si ça cancane comme un canard, alors ce doit être un canard&amp;quot; ).
&lt;br /&gt;
Le principe est donc de ne pas forcer le programmeur à utiliser une classe donnée, mais de l'obliger à mettre les données dans le format que nous voulons utiliser.
&lt;br /&gt;
J'ai écrit &amp;quot;jonathan&amp;quot; entre guillemets, Ruby comprends que cet objet est un String.
&lt;br /&gt;
Si j'écris [1, 14, 15] ce sera un Array (Tableau), {1=&amp;gt;&amp;quot;aaa&amp;quot;, 2=&amp;gt;&amp;quot;b&amp;quot;} sera un Hash (ou tableau associatif)...
&lt;/p&gt;
&lt;h4&gt;Bizarreries / P.O.L.S.&lt;/h4&gt;
&lt;p&gt;
Une autre particularité de Ruby est de suivre au maximum le P.O.L.S ou &amp;quot;Principle of Least Surprise&amp;quot; (&amp;quot;Principe de moindre surprise&amp;quot;).
&lt;/p&gt;
&lt;p&gt;
Cela peut sembler une évidence, mais en gros cela veut dire que les méthodes font ce que leur nom laisse penser qu'elles font.
&lt;/p&gt;
&lt;p&gt;
Pourtant, lorsque l'on lit la documentation de PHP, on se rend compte que ce n'est pas toujours le cas :
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
array_merge( array $array1  [, array $array2  [, array $...  ]] ) &lt;/p&gt;
&lt;p&gt;Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. &lt;/p&gt;
&lt;p&gt;If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. &lt;/p&gt;
&lt;p&gt;If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended. &lt;/p&gt;
&lt;p&gt;If only one array is given and the array is numerically indexed, the keys get reindexed in a continuous way.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
La même chose en Ruby (méthode merge de la classe Hash) :
&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
hsh.merge(other_hash) &lt;/p&gt;
&lt;p&gt;Returns a new hash containing the contents of other_hash and the contents of hsh, overwriting entries in hsh with duplicate keys with those from other_hash.
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Vous voyez la différence, n'est ce pas &lt;img src=&quot;/themes/john/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;
[private joke]&lt;br /&gt;
On peut aussi en faire la démonstration avec AS3 et Ruby pour retourner un string  : &lt;/p&gt;
&lt;h4&gt;AS3 :&lt;/h4&gt;
&lt;code class=&quot;Actionscript&quot;&gt;myString.&lt;span style=&quot;color: #0066CC;&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #0066CC;&quot;&gt;reverse&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #0066CC;&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;''&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;h4&gt;Ruby &lt;/h4&gt;
&lt;code class=&quot;Ruby&quot;&gt;my_string.&lt;span style=&quot;color:#9900CC;&quot;&gt;reverse&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color:#006600; font-weight:bold;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;
[/private joke]
&lt;/p&gt;
&lt;p&gt;
Voilà pour la première introduction, j'espère vous avoir donner envie d'en savoir un peu plus et je vous monterais bientot les rudiments de la syntaxe Ruby (certes un peu étrange pour un développeur PHP ou Flash, mais tellement sexy à l'usage !)
&lt;/p&gt;
&lt;p&gt;Les autres articles : &lt;/p&gt;
&lt;p&gt;
Ruby, c'est quoi comme langage ?&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/84</wfw:commentRss>
      </item>
    
  <item>
    <title>Mais Ruby, Ruby On Rails, c'est quoi en fait ?</title>
    <link>http://blogbangbang.com/post/2008/07/15/Mais-Ruby-Ruby-On-Rails-c-est-quoi-en-fait</link>
    <guid isPermaLink="false">urn:md5:e50a37085a0c6fb45a41464a3e04601c</guid>
    <pubDate>Tue, 15 Jul 2008 21:57:00 +0200</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>ruby</category><category>RubyOnRails</category><category>vulgarisation</category>    
    <description>    &lt;p&gt;
Comme souvent quand quelque chose vous passionne, vous ne pouvez pas vous empêcher d'en faire la promotion autour de vous.
&lt;/p&gt;
&lt;p&gt;
La plupart temps il s'agit d'un groupe de musique, d'une équipe de foot, d'un réalisateur ou d'un acteur et il est assez facile d'expliquer autour de vous
pourquoi votre préféré est selon vous meilleur que tous les autres.
&lt;br /&gt;
Mais quand l'une de vos passions est le Web, vous êtes déjà un peu plus étrange.
&lt;br /&gt;
Si vous précisez que c'est du développement Web qu'il s'agit, vous devenez carrément bizare.
&lt;br /&gt;
Et si vous finissez en expliquant que c'est plus particulièrement de Ruby ou Ruby et Ruby on Rails qu'il s'agit, vous devenez aux yeux de votre interlocuteur un extraterrestre !
&lt;/p&gt;
&lt;p&gt;
Et pourtant, c'est mon cas.  &lt;br /&gt;
Je suis &amp;quot;accroc&amp;quot; à Ruby et Ruby on Rails et je vais donc essayer d'expliquer en quelques billets ce dont il s'agit avec des mots simples.
&lt;/p&gt;
&lt;p&gt;
Ce tutoriel est désormais terminé, en voici toutes les parties : &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/15/ruby_cest_quoi_comme_langage&quot;&gt;Ruby, c'est quoi comme langage ?&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/19/Un-peu-de-syntaxe-Ruby&quot;&gt;Un peu de syntaxe Ruby...&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/Rails-la-locomotive-de-Ruby&quot;&gt;Rails, la locomotive de Ruby !&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/25/ActiveRecord-%3A-Vos-donnees-c-est-mon-dada&quot;&gt;ActiveRecord : Vos données, c'est mon dada.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/07/30/ActionController-%3A-Monsieur-Circulation&quot;&gt;ActionController : Monsieur Circulation&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blogbangbang.com/post/2008/08/06/ActionView-%3A-Imprimeur-de-son-etat&quot;&gt;ActionView : Imprimeur de son état&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2008/07/15/Mais-Ruby-Ruby-On-Rails-c-est-quoi-en-fait#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2008/07/15/Mais-Ruby-Ruby-On-Rails-c-est-quoi-en-fait#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/83</wfw:commentRss>
      </item>
    
  <item>
    <title>Le système d'exploitation</title>
    <link>http://blogbangbang.com/post/2006/11/14/Le-systeme-dexploitation</link>
    <guid isPermaLink="false">urn:md5:0451647c6739261875110ae03e8e5c45</guid>
    <pubDate>Tue, 14 Nov 2006 23:08:00 +0000</pubDate>
    <dc:creator>jblanche</dc:creator>
        <category>tout public</category>
        <category>Linux</category><category>Mac</category><category>Systèmes dexploitation</category><category>vulgarisation</category><category>windows</category>    
    <description>    &lt;p&gt;Lorsque
vous achetez un PC, il est la plupart du temps fourni avec ce que l'on
appelle un système d'exploitation et une suite de Logiciels.&lt;/p&gt;
&lt;p&gt;Actuellement, le système d'exploitation fourni sur la quasi-totalité des PC vendus est Windows (crée par la société Microsoft).&lt;/p&gt;
&lt;p&gt;Windows est une gamme de systèmes d'exploitation produite par
Microsoft, principalement destinées aux PC. Depuis les années 1990,
avec la sortie de Windows 95, son succès commercial pour équiper les
ordinateurs personnels est tel qu'il possède un statut de
quasi-monopole.&lt;/p&gt;
&lt;p&gt;En conséquence ses concurrents l'accusent de monopole et de
pratiques commerciales déloyales, et ont inspiré des poursuites
antitrust à son encontre. Windows est aussi un produit techniquement
très critiqué par certains. Il est notamment reproché à ce système son
instabilité et sa vulnérabilité.&lt;/p&gt;
&lt;p&gt;Pourtant, sa popularité n'a jamais été menacée, notamment parce que
les clients particuliers ne peuvent pas refuser à l'achat ces logiciels
en vente subordonnée. De ce fait, la majorité du grand public ignore
même la présence de concurrents sur ce marché.&lt;/p&gt;
&lt;p&gt;Pourtant ceux ci existent, et sont mêmes plutôt nombre ux.&lt;/p&gt;
&lt;p&gt;Parmi eux deux se détachent : Mac OS et Linux.&lt;/p&gt;
&lt;p&gt;Mac OS (pour Macintosh Operating System) est le nom du système
d'exploitation propriétaire des ordinateurs Apple Macintosh. Précurseur
de nombreux concepts actuels tel que le glisser-déposer, la corbeille
ou le plug-and-play, Mac OS ne s'est pourtant pas imposé sur le marché
des systèmes d'exploitation, certainement parce que son système ne
fonctionne que sur le matériel vendu par la marque.&lt;/p&gt;
&lt;p&gt;Linux est quand a lui un système d'exploitation libre. Après avoir
longtemps été réservé aux structures professionnelles du fait de sa
complexité, Linux a depuis quelques années acquis la maturité
nécessaire à son acceptation par le grand public &lt;a href=&quot;http://jonathan.blanchet.free.fr/dotclear/index.php/1&quot; title=&quot;1&quot;&gt;1&lt;/a&gt;
Pour l'utilisateur final, GNU/Linux se présente sous la forme d'une
distribution Linux, commerciale ou non, c'est-à-dire d'une solution
prête à être installée comprenant une sélection complète et cohérente
de logiciels, des programmes d'installation et d'administration de
l'ordinateur, ainsi qu'un mécanisme facilitant l'installation et la
mise à jour des logiciels.&lt;/p&gt;
&lt;p&gt;Conclusion :
Le but de ce billet est de montrer qu'il est possible d'avoir un autre
système d'exploitation que Microsoft Windows sur votre ordinateur
personnel. La possibilité Mac OS étant souvent réservée à des
utilisateurs précis (du fait de l'obligation d'utiliser le matériel
Apple), les utilisateurs lambda ont la possibilité de se tourner vers
le système d'exploitation Linux. Je détaillerais donc dans un prochain
billet quelques distributions libres et gratuites qui conviennent
parfaitement à l'usage d'un utilisateur lambda.&lt;/p&gt;</description>
    
    
    
          <comments>http://blogbangbang.com/post/2006/11/14/Le-systeme-dexploitation#comment-form</comments>
      <wfw:comment>http://blogbangbang.com/post/2006/11/14/Le-systeme-dexploitation#comment-form</wfw:comment>
      <wfw:commentRss>http://blogbangbang.com/feed/rss2/comments/4</wfw:commentRss>
      </item>
    
</channel>
</rss>