IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 on Rails Discussion :

Différence entre attr_accessor et attr_accessible


Sujet :

Ruby on Rails

  1. #1
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut Différence entre attr_accessor et attr_accessible
    Hello

    Dans Rails, quelle est la différence entre attr_accessor et attr_accessible? De ma compréhension, en utilise attr_accessor pour créer des méthodes getter et setter pour cette variable, Alors que attr_accessible rend cette variable accessible spécifiquement au monde extérieur.

    Quelqu'un peut-il s'il vous plaît me dire ce qui est la différence.

  2. #2
    Membre extrêmement actif
    Avatar de Madmac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 685
    Points : 1 376
    Points
    1 376
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par geforce Voir le message
    Hello

    Dans Rails, quelle est la différence entre attr_accessor et attr_accessible? De ma compréhension, en utilise attr_accessor pour créer des méthodes getter et setter pour cette variable, Alors que attr_accessible rend cette variable accessible spécifiquement au monde extérieur.

    Quelqu'un peut-il s'il vous plaît me dire ce qui est la différence.
    Avec attr_accessor, Ruby écrit pour toi les methodes getter et setter. Mais tu peux choisir de lui faire écrire seulement les getter ou seulement les setteur.


    Shortcut Effect
    attr_reader :v def v; @v; end
    attr_writer :v def v=(value); @v=value; end
    attr_accessor :v attr_reader :v; attr_writer :v
    attr_accessor :v, :w attr_accessor :v; attr_accessor :w

    Par exemple, imagine que tu veux t'assurer de n'avoir que des valeurs entre 1 et 20. Tu devra donc écrire toi-même ton setter. Il est donc préférable de n'utiliser attr_writer.

    Dans la plupart beaucoup de cas, tu peux être forcer d'utiliser attr_accessor. Et cela peux ouvrir la porte a du piratage, puisque le programme n'exerce aucune forme de contrôle. Imagine tu as un formulaire qui identifie le modèle de blouse et la couleur. Mais que l'objet qui va stocker c'est information contient également le prix. Et que ce prix obtenue a partir d'une base de donnée.

    Par erreur, le programmeur qui a fait un formulaire a utiliser un get au lieu d'un put. Et qu'un hackeur utilise cet erreur pour transforme la réponse de ton formulaire qui était : Order.new({ :type => 'blouse', :couleur => 6 }) en Order.new({ :type => 'blouse', :couleur => 6, :prix => 1.00 }). Avec la methode attr_accessible? il est possible d'empêcher ce genre d'attaque.

    Attention a partir de la version 4, cette pratique devient obsolète. Strong parameter devient la norme! Avec ce modèle les controlleurs sont un peu différent

    ancien modèle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # model
    class User < ActiveRecord::Base
      attr_accessible :username
    end
    
    # controller
    def create
      User.create!(params[:user])
    end
    Nouveau modèle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # model
    class User < ActiveRecord::Base
    end
     
    # controller
    def create
      User.create!(params.require(:user).permit(:username))
    end
    Donc les accesseurs ne sont plus directement produit par Ruby, mais par Rails. Ce qui permet de spécifier si les variable peuvent être initialiser par un formulaire.

    http://edgeapi.rubyonrails.org/class...arameters.html
    https://stackoverflow.com/questions/...sed-in-rails-4

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo