Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby Discussion :

Contribuez - Création de ressources Ruby


Sujet :

Ruby

  1. #1
    Community Manager

    Contribuez - Création de ressources Ruby
    Bonjour à tous.

    Nous aimerions développer la section Ruby / RoR de developpez.com.
    L'idéal serait de pouvoir créer une FAQ ainsi que quelques tutoriels.

    Afin de créer une FAQ, n'hésitez pas à poster en enfilade les questions / réponses qui vous viennent à l'esprit, celles que vous auriez aimé trouver sur un forum, ...

    Si vous souhaitez rédiger des articles / tutoriels (initiation, installation, avancé, .....) n'hésitez pas à me contacter par MP.

    Vous pouvez également demander un blog sur Developpez.

    d'avance à tous, et n'hésitez pas si vous souhaitez plus de détails.
    Pour contacter les différents services du club (publications, partenariats, publicité, ...) : Contacts

  2. #2
    Membre expérimenté
    j'ai fait un ptit script marrant pour "berner" les clients mails (testé sur thunderbird)
    en faite c'est un faux serveur smtp qui est compatible avec les clients mails , il recois le contenu du mail et l'ecrit dans un fichier
    codé en socket brute
    voila la source dans un fichier compressé :
    http://kedare.free.fr/Dist/smtp.tar.bz2

  3. #3
    Membre régulier
    ActiveRecord::base empty?
    Rails

    Q: Définir "empty?" pour tous vos modèles

    R: "attribute_names" & "attribute_present?"

    Vous est-il arrivé de regretter de ne pouvoir écrire quelque chose du genre "@personne.empty?" ?

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    module ApplicationHelper
       ...
    end
    
    #surcharge ActiveRecord
    class ActiveRecord::Base
    	
    	
    	# renvoi true si aucun attribut n'est renseigné
    	def empty?
    	
    		attribute_names.each do |attribute|
    			return false if attribute_present?(attribute)
    		end  
    	
    		return true
    	end
    end


    - Dans "application_helper.rb" on ajoute la définition "empty?" à ActiveRecord::Base afin d'en faire bénéficier tous nos modèles de l'application sans autre intervention.
    - On itère sur la liste des attributs afin de tester la virginité de chacun.
    - On renvoi "false" dès rencontré le premier attribut renseigné

    A savoir, "attribute_present?" retourne "false" dans les cas suivants
    - l'attribut vaut "nil"
    - l'attribut est "empty"
    - l'attribut contient "0" (zéro)

    test :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    irb(main):042:0> @p = Personne.new
    => #<Personne:0x4767bb4 @attributes= ...@new_record=true>
    irb(main):043:0> @p.nom
    => nil
    irb(main):044:0> @p.nom = ''
    => ""
    irb(main):046:0> @p.empty?
    => true



    Pour info : La définition de "attribute_present?" se trouve dans "base.rb" de ActiveRecord (par exemple C:\InstantRails\ruby\lib\ruby\gems\1.8\gems\activerecord-1.15.3\lib\active_record)

    Eventuelles suggestions bienvenues

  4. #4
    Membre éclairé
    Salut

    Citation Envoyé par Renaud° Voir le message
    Eventuelles suggestions bienvenues
    Plutôt que d'ajouter ça dans un helper, ne serait-t-il pas plus correct de créer un fichier dans lib/ puis d'en faire un require dans environment.rb ?

    D'autre part j'ai du mal à voir un cas d'utilisation où un modèle sauvé en BDD est vide. Notamment je ne vois pas comment son 'id' peut-être empty?. Et si il n'est pas sauvé, on peut utiliser new_record?.
    Est-ce que tu pourrais donner un exemple d'utilisation ?


    Sinon c'est un bon exemple d'extension d'AR::Base
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  5. #5
    Membre régulier
    Salut Taum,

    Citation Envoyé par Taum Voir le message
    Salut

    Plutôt que d'ajouter ça dans un helper, ne serait-t-il pas plus correct de créer un fichier dans lib/ puis d'en faire un require dans environment.rb ?
    Effectivement, ce serait mieux, je ne m'y étais pas encore interessé, merci du tuyau.

    D'autre part j'ai du mal à voir un cas d'utilisation où un modèle sauvé en BDD est vide. Notamment je ne vois pas comment son 'id' peut-être empty?. Et si il n'est pas sauvé, on peut utiliser new_record?.
    "attribute_names" ne renvoi pas l'attribut "id", il n'est donc pas testé dans la boucle de l'"empty?" que je proposais, laquelle peut renvoyer "true" sur un enregistrement existant en BDD, quant à "new_record?" je m'en servirai pour supprimer l'enregistrement de la base si nécessaire.


    Est-ce que tu pourrais donner un exemple d'utilisation ?
    La structure de ma base veut que les adresses soient dans une table à part. Dans le formulaire de "personne" je propose la saisie des deux objets "personne" et "adresse". Ces deux modèles sont liés par une relation "belongs_to :adresse" / "has_one :personne" et je récupère les infos du formulaire sous cette forme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def create
      @personne = Personne.new(params[:personne])
      @adresse   = Adresse.new(params[:adresse])
      @personne.adresse = @adresse unless @adresse.empty?
     
      if @personne.save 
        ... etc
    end

    La saisie de l'adresse n'est pas obligatoire, si j'affecte "@adresse" à "@personne.adresse" et que l'utilisateur laisse l'adresse vierge, un enregistrement vide sera inséré dans ma table adresses, c'est pourquoi un test est nécessaire. Une autre possiblité aurait été de tester "params[:adresse]" et de faire un "@personne.build_adresse..." sous condition, ce qui n'aurait pas été laid, mais j'ai d'autres ambitions : on peut voir cela plus comme une espèce de validation, donc ayant plus sa place dans le modèle que dans le controleur.

    Sinon c'est un bon exemple d'extension d'AR::Base
    Merci de ta critique

  6. #6
    Nouveau membre du Club
    Bonjour à tous,

    j'ai débuter ruby depuis peu donc (2jours) j'ai commencé par faire une petite application de photos à l'aide d'un livre qui n'est d'ailleurs pas répertorié que je trouve très bien fait

    RUBY ON RAILS vite et efficace de Bruce A.Tate et Curt Hibbs (créateur d'instant rails qd meme merci à lui )

    le livre n'est pas un gros pavé, il est très agréable à lire on nous explique bien tous les détails, l'annexe est fournie c'est que du bonheur ^^

    il faut cependant connaitre les bases d'ajax et des CSS pour bien comprendre et le principe du modèle vue controleur meme si cela est reexpliqué ca s'adresse donc à des développeurs qui connaissent déja l'objet c'est un bon prérequis...

    j'ai fait une démo de ce que l'on peut faire en 2jours tranquillement en decortiquant ce que l'on essaye de faire je peux vous la fournir ou l'heberger si vous voulez ... on y voit les vues de echaffaudages refaites et améliorées, la gestion d'un modele avec recursivité pour les catégories en gérant les "ancetres" parents etc... les listes de diapositives contenant des photos qui peuvent etre lues grace à lajax avec un changement de photos toutes les 2sec et l'utilisation du drag and drop pour changer l'ordre des photos...(qui est vraiment facile à mettre en oeuvre).
    enfin l'utilisation des vérifications directement dans le modele pour le nom d'une photo qui se doit d'être renseigné, dans la vue d'ajout si l'on ne renseigne pas le champs cela génère automatiquement le message d'erreur.

    à ce propos si quelqu'un sait comment personnaliser ces messages d'erreurs je veux qu'il m'exlique en anglais c'est pas top de meme pour les champs de type date les jours en anglais c'est pas super ^^

    je pense améliorer l'application avec un upload + redimensionnement avec rmagick comme plugin et essayer d'inserer une authentification avec plugin authentif restful comme ca cela sera assez complet

    EDIT : j'ai mis le lien de démo mais c pas fameux je peux la faire passer au besoin par mp contactez moi

    http://www.dailymotion.com/leken11/v...v4mp_demo_tech

  7. #7
    Membre éclairé
    Hello,

    Citation Envoyé par leken11 Voir le message
    à ce propos si quelqu'un sait comment personnaliser ces messages d'erreurs je veux qu'il m'exlique en anglais c'est pas top de meme pour les champs de type date les jours en anglais c'est pas super ^^
    Y'a qu'a demander

    Comment françiser une application Rails (avec l10n-simplified) ?

    l10n-simplified (LocalizationSimplified) est un plugin très simple pour changer la langue d'une application Rails. Contrairement à Globalize, ce plugin ne permet pas de faire une application multilingue ! (mais il est beaucoup plus simple à utiliser).

    1) Installation du plugin :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liv:~/Rails/asleep.fr taum$ script/plugin install svn://rubyforge.org/var/svn/l10n-simplified
    A    /Users/taum/Rails/asleep.fr/vendor/plugins/l10n-simplified
    [...]
    Exporté à la révision 92.


    2) Ouvrez le fichier vendor/plugins/l10n-simplified/init.rb. Commentez la ligne require 'lang_da' et décommentez celle correspondant à votre langue (lang_fr pour le français).

    3) Et non, il n'y a pas de 3 ...


    Votre application est maintenant en français. Messages d'erreurs, Dates, Nombres, Helpers (Array#to_sentence ) ...

    N'hésitez pas à editer le fichier vendor/plugins/l10n-simplified/lib/lang_fr.rb si vous n'aimez pas une des traductions proposée
    N'oubliez pas de rédémarrer votre serveur de développement après chaque changement pour qu'il soit pris en compte.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  8. #8
    Nouveau membre du Club
    cool mci bcp jinstalle ca direct

    EDIT : c'est abusément simple à mettre en place

  9. #9
    Expert éminent
    sinon, tu peux lui préciser le message à la main :

    DEFAULT_VALIDATION_OPTIONS = { :on => :save, :allow_nil => false, :message => nil
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  10. #10
    Nouveau membre du Club
    tu met ca dans le modele ?

  11. #11
    Expert éminent
    FAQ Ruby

    Q : Comment ne conserver que les caractères alphanumériques dans une chaîne ?

    R : Il suffit d'utiliser l'expression régulière suivante :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a = "eegv 42 efef*/ezf*+ukujk+ 68@^\`|[{#*/+8*/_-+*/ ' dsgsdf 526 f4ze"
     
    puts a.gsub(/[^[:alnum:]]/, '')


    Résultat :

    eegv42efefezfukujk688dsgsdf526f4ze
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  12. #12
    Expert éminent
    FAQ Rails / RJS :

    Q : Comment retarder un effet ?

    R : Rien de plus simple, il suffit d'utiliser page.delay comme suit :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    page.delay(3.0) do
       page.visual_effect(:highlight, "mon_element")
    end


    Pour effectuer des retards en cascade, il suffit d'imbriquer les page.delay.
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  13. #13
    Expert éminent
    FAQ Rails / RJS :

    Q : Comment exécuter un effet au chargement de la page ?

    R : Il faut pour cela utiliser update_page_tag dans votre vue :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <%= update_page_tag do |page|
            page.visual_effect(:highlight, "mon_element")
        end
    %>
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  14. #14
    Membre régulier
    FAQ Ruby
    Q : Comment convertir une String en Hash?

    R : Utiliser la fonction eval
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    str="{'s1'=>1,'s2'=>'v2'}"
    eval(str)

    et ça donne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    str.class
    => String
    eval(str)
    => {"s1"=>1, "s2"=>"v2"}
    eval(str).class
    => Hash

  15. #15
    Membre actif
    FAQ : ROR
    Q: Comment faire une liste déroulante simplement et sans écrire d'html dans un formulaire ?
    R: Avec Collection_select

    Détail :
    Liste déroulante pour les formulaires avec les helpers de base.

    Controller products
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    @list_families = Family.find(:all)
    @product = Product.find(params[:id])


    View edit
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <% form_for(@product, :url => {:action => "update"} ) do |f| %>
    <%= f.collection_select :family_id,
              @list_families,
              :id,
              :name,
              {
                :include_blank => "Choississez une famille",
                :selected => @product.family.id.to_s
              } %>
            <%= f.submit "Mise à jour" %>
    <% end %>