2010-07-11 4 views
1

im new для рубинов и рельсов.декларация класса для рубинов

в RoR3 контроллер наследует от ActionController::Base

request.env["SERVER_ADDR"] 

поэтому запрос представляет собой метод в базовом классе (то есть внутри модуля ActionController)?

Что такое env и ["SERVER_ADDR"]?

было бы здорово, если бы кто-то мог составить пример кода ... это было бы очень полезно понять!

спасибо!

ответ

1
request.env["SERVER_ADDR"] 
  1. request является либо

    а. разглашение местной переменной requestили

    b. посылая сообщение :request без аргументов к неявному приемнику self,

  2. env посылает сообщение :env без аргументов к объекту, полученных разыменования request или объект, возвращаемым в ответ на отправку сообщения :request к self на шаге 2,
  3. ["SERVER_ADDR"] посылает сообщение :[] с аргументом "SERVER_ADDR" на объект возвращен в ответ на отправку сообщения :env на шаге 2 и
  4. "SERVER_ADDR" является строка символов.

Вы могли бы более явно написать это:

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

или даже более явным, как это:

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

и даже полный выход:

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

отличное объяснение! +2! :) 1 невидимая точка –

1

request.env["SERVER_ADDR"] также может быть назван request().env()["SERVER_ADDR"]. Таким образом, env - это метод, который вызывается без аргументов для объекта, возвращаемого request(), а затем вы вызываете [] на объект, возвращенный им с аргументом "SERVER_ADDR".

+0

но почему не У вас есть точка после env() ... request(). env(). ["SERVER_ADDR"] –

+0

Поскольку 'foo [bar]' i лучше писать и писать, чем 'foo. [bar]', поэтому создатели ruby ​​решили, что синтаксис для вызова '[]' должен быть первым. – sepp2k

Смежные вопросы