Partage
  • Partager sur Facebook
  • Partager sur Twitter

MOOC Ruby on Rails

    17 mai 2017 à 8:43:47

    @JerfriedBlanchardBoly : votre version de rubygems semble obsolète, il faut le mettre à jour. Cela étant, ce cours ne prend pas en charge les systèmes d'exploitation Windows, ainsi je recommande plutôt de le suivre sous Ubuntu, par exemple.

    J'en profite pour expliquer sommairement pourquoi le cours n'est pas proposé pour Windows, cela est principalement du à 2 raisons : 

    La première est que le terminal sous Windows n'est que très récent : il a été introduit en août 2016 dans Windows 10. Le cours ayant été écrit avant, il fallait faire plein de « hack » pour faire fonctionner Rails sur Windows : un nid à problèmes. Attention, à ne pas confondre avec l'invite de commande Windows, qui ressemble à un terminal mais n'en est pas un.

    La seconde est que votre serveur d'hébergement utilisera Linux et non Windows dans 99.99 % des cas. Je recommande fortement de programmer avec Ubuntu ou OSX quand son serveur tourne avec Linux. En effet, certains éléments de votre programmer sera incompatible avec l'un ou l'autre des systèmes à moins, encore une fois, de beaucoup bidouiller – ce que je ne recommande pas.

    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2017 à 17:54:08

      Julien Grillot a écrit: > La seconde est que votre serveur d'hébergement utilisera Linux et non Windows dans 99.99 % des cas. Je recommande fortement de programmer avec Ubuntu ou OSX quand son serveur tourne avec Linux. En effet, certains éléments de votre programmer sera incompatible avec l'un ou l'autre des systèmes à moins, encore une fois, de beaucoup bidouiller – ce que je ne recommande pas.

      Sinon, lorsque l'on me pose la question, je propose d'installer Docker sous windows et de se créer un environnement de developpement sous Docker, cela permet de rester sur windows et d'avoir un moteur ruby fonctionnel sous linux !

      J'explique comment faire cela ici, sur mon blog perso

      • Partager sur Facebook
      • Partager sur Twitter

      Freelance, Architecte SI indépendant et optimiste de la Cyber Sécurité Retrouvez des tests, démo, tuto rapide sur mon blog

        30 mai 2017 à 7:25:50

        Bonjour à tous,

        Je viens de démarrer le MOOC et j'ai un pb après lancement du serveur et création de ma première page :

        No route matches [GET] "/pages/home"

        J'ai l'impression qu'il ne crée pas le dossier pages/home...

        Merci de votre aide précieuse et bonne journée !

        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2017 à 8:29:00

          Hello,

          Tu peux nous montrer ton fichier `config/route.rb` ainsi qu'un `tree` de ton dossier `app`?

          • Partager sur Facebook
          • Partager sur Twitter

          Architecte logiciel - Software craftsmanship convaincu.

            30 mai 2017 à 12:48:55

            Mon dossier APP
            Mon fichier route.rb est vide, puisque rien n'est dit dans le MOOC...
            Mais je dois surement y insérer quelque chose vu ce que je trouve sur les forums..
            Etant débutant je n'y arrive pas :) 
            Pour info :  Rails 4.2.6 / Ruby 2.3.0
            Rails.application.routes.draw do
            
            	
              
            end
            

            -
            Edité par Barbajuan 30 mai 2017 à 12:55:01

            • Partager sur Facebook
            • Partager sur Twitter
              30 mai 2017 à 13:02:12

              Hello,

              Tu n'as pas de controller, ni de route, ni d'HTML.

              Il te faut tout ces éléments pour pouvoir voir une vue fonctionnelle. 

              • Partager sur Facebook
              • Partager sur Twitter

              Architecte logiciel - Software craftsmanship convaincu.

                30 mai 2017 à 13:09:38

                RESOLU !!!

                Désolé du dérangement.

                J'ai honte de le dire mais voilà pourquoi : je démarrais la commande generate controller après avoir lancé le serveur....

                Voilà je vous laisse rigoler...

                :soleil:

                • Partager sur Facebook
                • Partager sur Twitter
                  1 juin 2017 à 14:54:33

                  Bonjour !

                  Petite question concernant une commande avant de lancer rails s : à quoi sert  " bundle install " ?

                  Merci de vos lumières

                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 juin 2017 à 15:01:58

                    Hello,

                    En gros, `bundle install` vas installer les librairies lié à ton projet.

                    Ensuite, tu vas pouvoir utiliser `bundle exec` pour rester dans le contexte de ton Gemfile :)

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Architecte logiciel - Software craftsmanship convaincu.

                      1 juin 2017 à 16:16:41

                      Ok merci !

                      Par contre petit problème pour la Partie Modèles du MOOC

                      je fais bundle install : erreur :

                      Downloading rdoc-4.2.0 revealed dependencies not in the API or the lockfile (json (~> 1.4)).

                      Either installing with `--full-index` or running `bundle update rdoc` should fix the problem.

                      Je fais bundle update doc et là ça marche.

                      Apres je fais comme demandé rake db:install et là c'est le drame :) :

                      rake aborted!

                      Gem::LoadError: You have already activated rake 12.0.0, but your Gemfile requires rake 10.4.2. Prepending `bundle exec` to your command may solve this.

                      Un peu (beaucoup) d'aide serait la bienvenue o_O

                      EDIT :

                      Résolu (pour moi en tout cas!) après recherche sur Stackoverflow : faire commande "bundle update rake" puis de nouveau rake db:migrate  

                      -
                      Edité par Barbajuan 1 juin 2017 à 16:34:25

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 juin 2017 à 16:45:34

                        Pense à ajouter `bundle exec` devant chacune de tes commandes ruby.

                        C'est vraiment important pour la gestion des dépendances dans un projet.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Architecte logiciel - Software craftsmanship convaincu.

                          15 juin 2017 à 16:48:37

                          Bonjour à tous !

                          Je n'arrive pas à installer l'archive du cours : https://github.com/oc-courses/initiation-rails-p2/archive/master.zip .

                          Je reçois un message d'erreur lorsque je fais bundle install sur la gem json :

                          An error occurred while installing json (1.8.3), and Bundler cannot continue.

                          Make sure that `gem install json -v '1.8.3'` succeeds before bundling.

                          J'imagine que c'est dû à un décalage de version que l'on utilise... J'ai fait plusieurs tentatives pour résoudre ce problème, mais au mieux j'arrive à faire l'installation puis la migration de la base de donnée pose problème...!

                          Avez-vous le même problème ? Pouvez-vous m'aider ? En attendant je vais continuer le cours avec mes propres fichiers et dossiers !

                          J'ai encore une question, concernant la correction des exercices. Je ne peux pas corriger un exo car je n'arrive pas à lancer le rails server. J'ai réussi à faire le bundle install sans erreur ni warning puis quand je fais rails s, j'obtiens des warnings concernant "Fixnum" et "Bignum" et une erreur me disant "stack level too deep".

                          Après de rapides recherches j'ai l'impression que c'est parceque la personne qui a fait l'exercice a utilisé une version de ruby inférieure à 2.4. Du coup j'ai 2 options :

                          - utiliser une ancienne version de rails pour lancer le rails server : comment le faire ? (Ca résoudrait peut-être mon problème précédent avec la gem json?)

                          - corriger un autre exercice, mais je n'en ai eu que 3 en tout et j'ai déjà fait les 2 autres : pouvez-vous m'en donner un autre ?

                          Merci de votre aide !  

                          -
                          Edité par Isarceaux 21 juin 2017 à 14:19:01

                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 juin 2017 à 20:40:37

                            Hello

                            Pense à faire sudo apt-get install libgmp-dev si t'y est sous Debian et suivants  ;)

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Architecte logiciel - Software craftsmanship convaincu.

                              20 juin 2017 à 17:32:57

                              Merci pour votre aide ! Cependant je suis sur Mac OS Sierra...


                              necros211 a écrit:

                              Hello

                              Pense à faire sudo apt-get install libgmp-dev si t'y est sous Debian et suivants  ;)



                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 juin 2017 à 10:11:39

                                Bonjour à tous, je me suis lancée dans l'apprentissage de RoR pour mon stage il y a quelques jours. J'en suis à l'étape d'association de modèles : https://openclassrooms.com/courses/initiez-vous-a-ruby-on-rails/l-association-de-modeles

                                J
                                'ai du mal à comprendre les liens qui se font entre les différentes structures (variables, modèles, vues, controleurs, migration etc ..), j'ai l'impression que parfois c'est un peu "magique", ça se fait tout seul. Soit. J'ai une question plus spécifique :

                                Lors de l'ajout de ces lignes :

                                # app/models/book.rb
                                class Book < ActiveRecord::Base
                                  belongs_to :category
                                end
                                # app/models/category.rb
                                class Category < ActiveRecord::Base
                                  has_many :books
                                end

                                Je comprends bien l'utilisation du pluriel et du singulier (un livre n'appartient qu'à UNE seule catégorie, une catégorie à plusieurs livre), j'aimerais savoir néanmoins à quoi les variables :books et :category font référence. On peut imaginer que :category fait référence à son modèle mais dans ce cas je ne vois pas à quoi :books peut faire référence (à la table ?). Est-ce là aussi la magie de RoR où on fait automatiquement le lien entre les structures malgré le pluriel, singulier ?

                                Merci, j'espère que vous pourrez éclairer ma lanterne :)

                                 EDIT : et du coup cela ne fonctionne pas chez moi REEDIT : nevermind j'ai fait un bundle update et maintenant ça marche .. mystère.

                                book = Book.last
                                book.category
                                NoMethodError: undefined method `category' for #<Book:0x007f99544f0a48>
                                Did you mean?  category_id

                                -
                                Edité par Punchline 28 juin 2017 à 10:28:40

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 juin 2017 à 10:24:16

                                  Hello,

                                  Rails fait ces manipulations là:

                                  :books.to_s.singularize.classify
                                   => "Book" 
                                  :books.to_s.singularize.classify.constantize
                                   => Book 
                                  


                                  Du coup, il retrouve la classe en question.

                                  En allant plus loin, on vas même dire qu'il vas scoper le résultat avec un 

                                  :books.to_s.singularize.classify.constantize.where(category_id: @id)
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Architecte logiciel - Software craftsmanship convaincu.

                                    28 juin 2017 à 10:42:48

                                    necros211 a écrit:

                                    Hello,

                                    Rails fait ces manipulations là:

                                    :books.to_s.singularize.classify
                                     => "Book" 
                                    :books.to_s.singularize.classify.constantize
                                     => Book 
                                    


                                    Du coup, il retrouve la classe en question.

                                    En allant plus loin, on vas même dire qu'il vas scoper le résultat avec un 

                                    :books.to_s.singularize.classify.constantize.where(category_id: @id)
                                    Merci beaucoup pour tes explications ! Ca m'aide de savoir ce qu'il y a derrière tous ces trucs qui paraissent anodins.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      28 juin 2017 à 11:47:24

                                      De rien.

                                      Dans Rails rien n'est magique ou autre :)

                                      Tout est même plutot logique une fois que l'on as compris comment fonctionne le framework, ainsi que le langage.

                                      Rails fait beaucoup de monkey patch, et je te conseil de lire http://guides.rubyonrails.org/active_support_core_extensions.html pour avoir accès à de super fonctions que tu n'as pas en ruby classique.

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Architecte logiciel - Software craftsmanship convaincu.

                                        28 juin 2017 à 19:23:13

                                        Bonjour à tous,

                                        Tout d'abord merci pour ce cours très bien fait et terriblement intéressant! :)

                                        J'ai cependant un problème que je n'arrive pas à résoudre : J'ai récupéré le code de l'auteur qui est a téléchargé dans le premier cours du chapitre "Maitrisez les modèles" puis poursuivi jusqu'au cours "les validations" et je me rends compte qu'il m'est impossible de modifier le titre d'un livre. Aucun problème pour en créer de nouveaux ou pour en supprimer mais le fait de vouloir en modifier un me renvoie sur cette page d'erreur :

                                        Pourtant je ne vois pas d'erreur dans le fichier "route.rb" ni dans le "books_controller.rb" dont voici les codes :

                                        routes.rb
                                        
                                        Rails.application.routes.draw do
                                          get 'books' => 'books#index'
                                          post 'books' => 'books#create'
                                          get 'books/:id' => 'books#show'
                                          patch 'books/:id' => 'books#update'
                                          delete 'books/:id' => 'books#destroy'
                                        books_controller.rb
                                        
                                        class BooksController < ApplicationController
                                          def index
                                            @books = Book.all
                                            @categories = Category.all
                                          end
                                        
                                          def create
                                            Book.create title: params[:title], category_id: params[:category_id]
                                            redirect_to "/books"
                                          end
                                        
                                          def show
                                          @book = Book.find(params[:id])
                                          end
                                          
                                        
                                          def update
                                            @book = Book.find(params[:id])
                                            if @book.update title: params[:title]
                                              redirect_to "/books/#{params[:id]}"
                                            else
                                              render 'show'
                                            end
                                          end
                                        
                                          def destroy
                                            Book.find(params[:id]).destroy
                                            redirect_to "/books"
                                          end
                                        end
                                        

                                        J'essaye tout de même de continuer le cours mais sans comprendre pourquoi ça ne fonctionne pas c'est ennuyeux.

                                        Merci d'avance pour vos réponses.

                                        @bientôt!

                                        P.S : Je suis sur Mac

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          28 juin 2017 à 20:38:29

                                          Hello,

                                          Que vois tu ici? 

                                          patch 'books/:id' => 'books#update'

                                          Perso je vois un id ce qui signifie que tu vas en avoir besoin pour identifier ton objet.

                                          Dans ta route, il te manque l'id, du coup rails dit qu'il n'existe pas de route associé.

                                          C'est juste ce qu'il te manque :)

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Architecte logiciel - Software craftsmanship convaincu.

                                            29 juin 2017 à 2:26:43

                                            necros211 a écrit:

                                            Hello,

                                            Que vois tu ici? 

                                            patch 'books/:id' => 'books#update'

                                            Perso je vois un id ce qui signifie que tu vas en avoir besoin pour identifier ton objet.

                                            Dans ta route, il te manque l'id, du coup rails dit qu'il n'existe pas de route associé.

                                            C'est juste ce qu'il te manque :)

                                            Merci necros211 pour ta réponse mais je dois dire que je ne comprends pas... La route qui est donnée me semble bonne et fonctionne pour les autres (get, post, delete). Elle bloque seulement pour le "patch". Je ne comprends vraiment pas ce qu'il manque. :(

                                            Bonne journée :)

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              29 juin 2017 à 8:20:40

                                              Dans ton url tu as oublier de préciser quel objet tu veux modifier.

                                              Il te faut juste rajouter son id ;) 

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Architecte logiciel - Software craftsmanship convaincu.

                                                24 juillet 2017 à 16:02:57

                                                Bonjour à toutes et tous.

                                                Tout d'abord merci Julien pour votre cours sur Rails.

                                                J'en suis au chapitre sur la pagination et j'ai un soucis tout bête que je n'arrive pas à comprendre.

                                                J'ai essayé dans la console le code que vous avez donné pour générer les 60 livres et bizarrement il me renvoie un message rollback transaction

                                                Du coup j'aimerais comprendre ce qui se passe et savoir comment je pourrais générer 60 livres automatiquement parce que bon ... à la main ça serait une perte de temps. Et même temps si je n'ai pas suffisamment de livres il me sera difficile de tester le gem de pagination.

                                                Si quelqu'un a une idée je suis preneur, merci d'avance.

                                                Je précise que je suis sur Rails 5.1 et Ruby 2.4 sur macOS et que tous les codes du cours fonctionnent parfaitement (modulo quelques mini ajustement du types rails db:migrate au lieu de rake db:migrate).

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  24 juillet 2017 à 17:01:19

                                                  Hello, tu peux nous montrer ton code ainsi que ton erreur?

                                                  (Model, Schéma table, Script de génération) 

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Architecte logiciel - Software craftsmanship convaincu.

                                                    26 juillet 2017 à 16:22:17

                                                    Bonjour,

                                                    • app/models/book.rb :
                                                      class Book < ActiveRecord::Base
                                                        belongs_to :category
                                                      
                                                        validates :title, presence:
                                                                            {
                                                                              message: "Le titre doit être renseigné."
                                                                            }
                                                      
                                                        validates :title, uniqueness:
                                                                            {
                                                                              message: "Ce titre est déjà pris."
                                                                            }
                                                      
                                                        scope :french, -> { where(category_id: 1) }
                                                      end 


                                                    • app/models/category.rb :
                                                      class Category < ActiveRecord::Base
                                                        has_many :books
                                                      end



                                                     alors voilà les captures de ma saisie (railsC1.png)

                                                    et des erreurs renvoyées (railsC2.png) lorsque je tape le code pour l'itération

                                                    60.times do |i|
                                                    Book.create title: "Livre n°#{i}"
                                                    end


                                                    Et voici ce que je vois sur la page d'index (index.png)

                                                    Puis sur celle du show enfin voici leurs codes respectifs

                                                    • app/views/books/index :
                                                      <h1>Liste des livres</h1>
                                                      
                                                      <% @books.each do |book| %>
                                                          <p><%= book_link book %></p>
                                                      <% end %>
                                                      
                                                      <%= form_tag "/books", method: "post" do %>
                                                          <input type="text" name="title" placeholder="title" />
                                                          <input type="text" name="category_id" placeholder="category_id"/>
                                                          <select name="category_id">
                                                              <% @categories.each do |category| %>
                                                                  <option value="<%= category.id %>">
                                                                      <%= category.name %>
                                                                  </option>
                                                              <% end %>
                                                          </select>
                                                          <input type="submit" value="Ajouter le livre" />
                                                      <% end %>
                                                      
                                                    • app/views/books/show : 
                                                      <h1><%= @books.title %></h1>
                                                      
                                                      <%= form_tag "/books/#{@books.id}", method: "patch" do %>
                                                          <input type="text"
                                                                 name="title"
                                                                 value="<%= @books.title %>"/>
                                                          <input type="submit"
                                                                 value="Modifier le livre" />
                                                      <% end %>
                                                      
                                                      <%= form_tag "/books/#{@books.id}", method: "delete" do %>
                                                          <input type="submit" value="Supprimer le livre" />
                                                      <% end %>
                                                      
                                                      <p><a href="/books">Revenir à l'index</a></p>
                                                      
                                                      



                                                    Il me semble avoir suivi à la lettre les instructions du cours, si quelqu'un voit où est l'erreur merci de me le signaler parce que j'avoue que je ne comprends pas ce qui cloche.

                                                    Pour rappel je suis sur Rails 5.1 et Ruby 2.4 sur macOS

                                                    Merci par avance


                                                    -
                                                    Edité par emacsfreeman 26 juillet 2017 à 17:04:54

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      5 août 2017 à 18:04:46

                                                      Bonjour, merci à tous ceux qui apportent des réponses ici :)

                                                      Pour la question sur comment fonctionnent les has_many :books et belongs_to :category, Rails est en effet capable de « deviner » les modèles dont il est question, car il gère notamment la pluralisation (il est capable de comprendre que books vient de book ; et à partir de book il trouve le modèle Book). Pour l'anecdote, Rails gère aussi les exceptions anglaises, par exemple il est capable de passer de children à child !

                                                      @emacsfreeman : c'est lié à Rails 5, qui, par défaut, impose de renseigner les « belongs_to » lors de la création d'un objet. Par exemple, ces codes sont équivalents : 

                                                      # Rails 4
                                                      class Book < ActiveRecord::Base
                                                        belongs_to :category
                                                        validates :category, presence: true
                                                      end
                                                      
                                                      # Rails 5
                                                      class Book < ActiveRecord::Base
                                                        belongs_to :category
                                                        # pas besoin du validates qui est implicité
                                                      end

                                                      Pour ne pas imposer la présence d'une catégorie, il est possible de faire : 

                                                      # Rails 5
                                                      class Book < ActiveRecord::Base
                                                        belongs_to :category, optional: true
                                                      end

                                                      Une autre possibilité serait d'assigner une catégorie aux livres créés :

                                                      # plusieurs façon de faire : 
                                                      
                                                      category_id = Category.first.id
                                                      60.times do |i|
                                                        Book.create title: "Livre n°#{i}", category_id: category_id
                                                      end
                                                      
                                                      # ou
                                                      
                                                      category = Category.first
                                                      60.times do |i|
                                                        Book.create title: "Livre n°#{i}", category: category
                                                      end
                                                      
                                                      # ou
                                                      
                                                      category = Category.first
                                                      60.times do |i|
                                                        category.books.create title: "Livre n°#{i}"
                                                      end

                                                      Voila :) !

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        8 août 2017 à 19:48:47

                                                        Bonsoir tout le monde,

                                                        Je poste ce message dans le forum pour demander votre aide car ça faire longtemps que je cherche comment enregistrer les données d'un formulaire dans 2 table différent a la fois.

                                                        Voici la page que je souhaite réaliser.

                                                        Vous voyez donc qu'il y as 2 section, la section concernant l'offre elle même et la section concernant l'entreprise qui recrute. Les information des 2 section sont sur une page et seront enregistré dans 2 table différent lors de la soumission du formulaire.

                                                        SVP aidez-moi.

                                                        Francel

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Francel
                                                          11 août 2017 à 15:52:50

                                                          Il ne faut pas mélanger front-end et back-end,

                                                          Pour moi tu aurais 2 requetes à envoyer à ton backend lorsque tu appuis sur ton bouton.

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Architecte logiciel - Software craftsmanship convaincu.

                                                            21 novembre 2017 à 1:34:47

                                                            Bonjour,

                                                            J'ai un petit problème lors de l'installation de Ruby On Rails sur MacOs, lorsque je lance la commande il y a manisfestement un problème de droit :

                                                            ERROR:  While executing gem ... (Gem::FilePermissionError)
                                                                You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory

                                                            Après plusieurs recherches, je n'ai pas trouvé de solution concrète, pour pouvoir installer rails.

                                                            Merci d'avance.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              21 novembre 2017 à 9:48:28

                                                              Hello, utilise RVM ou RBenv.

                                                              Ce sont des gestionnaires de version qui savent gérer ce genre de cas.

                                                              De plus je te conseille de passer en Ruby 2.4.1 ;)

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Architecte logiciel - Software craftsmanship convaincu.

                                                              MOOC Ruby on Rails

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown