Из Rails 3.0 в Rails 3.2 content_for
было действительно изменено:
3.0 :
def content_for(name, content = nil, &block)
content = capture(&block) if block_given?
@_content_for[name] << content if content
@_content_for[name] unless content
end
3.2 :
def content_for(name, content = nil, &block)
if content || block_given?
content = capture(&block) if block_given?
@view_flow.append(name, content) if content
nil
else
@view_flow.get(name)
end
end
Это показывает нам, что из 3.2 content_for
также работает для показа / вставки контента, не только для сохранения его для именованного раздела.
Также, если вы пытаетесь отладить yield
логика, которую вы увидите, что она дает до правильной инициализации content_for
.
Таким образом, оставляя фрагмент кэширования из этого обсуждения, я могу заключить, что content_for
является предпочтительным способом вставки именованныхразделы в любом месте, кроме макетов верхнего уровня.В помощниках и других ситуациях yield
должно давать неверные результаты.