2010-07-11 8 views
1

im nouveau à rubis et des rails.déclaration de classe pour ruby ​​

dans RoR3 un contrôleur hérite de la ActionController::Base

request.env["SERVER_ADDR"] 

si la demande est une méthode dans la classe de base (qui est à l'intérieur du module de ActionController)?

qu'est-ce que env alors et ["SERVER_ADDR"]?

serait génial si quelqu'un pouvait faire un petit exemple de code ... ce serait très utile à comprendre!

merci!

Répondre

1
request.env["SERVER_ADDR"] 
  1. request est soit

    a. déréférencement de la variable locale requestou

    b. l'envoi du message :request sans argument au récepteur implicite self,

  2. env envoie le message :env sans argument à l'objet obtenu par le déréférencement request ou l'objet retourné en réponse à l'envoi du message :request-self à l'étape 2,
  3. ["SERVER_ADDR"] envoie le message :[] avec l'argument "SERVER_ADDR" de l'objet retourné en réponse à l'envoi du message :env à l'étape 2 et
  4. "SERVER_ADDR" est une chaîne littérale.

Vous pouvez écrire plus explicitement comme ceci:

self.request.env.[]("SERVER_ADDR") 

ou encore plus explicite comme ceci:

self.request().env().[]("SERVER_ADDR") 

et même complète sur:

self.send(:request).send(:env).send(:[], "SERVER_ADDR") 
+0

bonne explication! +2! :) 1 point invicible –

1

request.env["SERVER_ADDR"] peut également s'écrire request().env()["SERVER_ADDR"]. Donc env est une méthode qui est appelée sans arguments sur l'objet retourné par request() puis vous appelez [] sur l'objet renvoyé par celui-ci avec l'argument "SERVER_ADDR".

+0

, mais pourquoi ne pas Vous avez un point après env() ... request(). env(). ["SERVER_ADDR"] –

+0

Parce que 'foo [ba r] 'est plus agréable à lire et à écrire que' foo. [bar] ', donc les créateurs de ruby ​​ont décidé que la syntaxe à appeler' [] 'devrait être la première. – sepp2k