Понимание этого помощника Rails - PullRequest
0 голосов
/ 13 июля 2010

Это вспомогательный метод, который я нашел в коммерческом приложении ruby ​​on rails.

Я пытаюсь лучше понять, что здесь происходит, особенно с методом capture () в строке 12,никогда не видел раньше.Если задан блок, он захватывает его, в противном случае нет содержимого.Но откуда берется метод capture ()?что он делает?

 11   def hook(hook_name, locals = {}, &block)
 12     content = block_given? ? capture(&block) : ''
 13     result = Spree::ThemeSupport::Hook.render_hook(hook_name, content, self, locals)
 14     block_given? ? concat(result.to_s) : result
 15   end

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

Когда вы выходите из блока в представлении ERB (по крайней мере, в рельсах 1.x и 2.x), он будет записывать напрямую в буфер и, следовательно, в отображаемый html, что, вероятно, нежелательно. Вместо этого вы можете «захватить» результат оценки блока и присвоить его переменной, как они это сделали здесь. Во всяком случае, я, вероятно, не объясняю это так, как Райан Бейтс делает здесь:

http://railscasts.com/episodes/40-blocks-in-view

1 голос
/ 13 июля 2010

блок захвата позволяет вам взять блок из файла шаблона, обработать его и сохранить его в переменной.

API: http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#M002300

То, что кажется, происходит здесь,Вы вызываете метод ловушки для блока в шаблоне, который обрабатывается и затем форматируется на основе темы в spree (на основе имени модулей), а затем выплевывает (или, если быть более технически, возвращает) вновь отформатированныйблок.

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