Как выполняется процедура в предложении caches_action if - PullRequest
0 голосов
/ 01 апреля 2010

У меня вопрос новичка, который я не могу понять. Как выполняется процесс в условии if для метода caches_action.

Например:

caches_action :show, :if=>Proc.new{|x| something}

Чего я не понимаю, так это называется. Я знаю, что могу выполнить процедуру, определенную как

proc= Proc.new от proc.call

так что я не понимаю, как это называется.

Во-вторых, как мне пройти условия вроде

if logged_in?

Буду признателен за любую помощь в этом

Ответы [ 2 ]

4 голосов
/ 01 апреля 2010

Параметр передачи в Proc является текущим объектом. Так что в вашем примере это переменная x. Таким образом, вы можете вызвать все методы этого экземпляра. Если вы хотите вызвать метод logged_in?. Вы можете, потому что это публичный экземпляр

caches_action :show, :if => Proc.new{|x| x.logged_in? }

Процедура вызова перед фильтром. Caches_action похож на before_filter. Этот фильтр проверяет, есть ли уже кэш об этом действии или нет. Если только кеш не сгенерирован.

С :if фильтр вызывается только если if - это вызов. Так что процесс называется колл. Если вы не используете Proc, значение :if интерпретируется только при запуске чтения файла на сервере.

0 голосов
/ 02 апреля 2013

:if => proc { logged_in? }

Насколько я понимаю, вы отправляете блок для оценки.Таким образом, если у вас есть метод в помощнике или в контроллере logged_in, он вызовет его и оценит.Я полагаю, что именно класс контроллера вызывает proc.

Из документации;«Если задан блок, он вызывается с текущим экземпляром контроллера.»

http://api.rubyonrails.org/classes/ActionController/Caching/Actions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...