diff options
author | Kasper Timm Hansen <kaspth@gmail.com> | 2015-02-15 22:39:04 +0100 |
---|---|---|
committer | Kasper Timm Hansen <kaspth@gmail.com> | 2015-02-21 16:06:57 +0100 |
commit | 11644fd0ceb99f3f0529323df5ad625c596b3f21 (patch) | |
tree | d81f01715fd7966d193a657cc452edd308234fb0 /actionview/lib/action_view/template/handlers | |
parent | e56c63542780fe2fb804636a875f95cae08ab3f4 (diff) | |
download | rails-11644fd0ceb99f3f0529323df5ad625c596b3f21.tar.gz rails-11644fd0ceb99f3f0529323df5ad625c596b3f21.tar.bz2 rails-11644fd0ceb99f3f0529323df5ad625c596b3f21.zip |
Collections automatically cache and fetch partials.
Collections can take advantage of `multi_read` if they render one template
and their partials begin with a cache call.
The cache call must correspond to either what the collections elements are
rendered as, or match the inferred name of the partial.
So with a notifications/_notification.html.erb template like:
```ruby
<% cache notification %>
<%# ... %>
<% end %>
```
A collection would be able to use `multi_read` if rendered like:
```ruby
<%= render @notifications %>
<%= render partial: 'notifications/notification', collection: @notifications, as: :notification %>
```
Diffstat (limited to 'actionview/lib/action_view/template/handlers')
-rw-r--r-- | actionview/lib/action_view/template/handlers/erb.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/actionview/lib/action_view/template/handlers/erb.rb b/actionview/lib/action_view/template/handlers/erb.rb index 85a100ed4c..88a8570706 100644 --- a/actionview/lib/action_view/template/handlers/erb.rb +++ b/actionview/lib/action_view/template/handlers/erb.rb @@ -123,6 +123,24 @@ module ActionView ).src end + # Returns Regexp to extract a cached resource's name from a cache call at the + # first line of a template. + # The extracted cache name is expected in $1. + # + # <% cache notification do %> # => notification + # + # The pattern should support templates with a beginning comment: + # + # <%# Still extractable even though there's a comment %> + # <% cache notification do %> # => notification + # + # But fail to extract a name if a resource association is cached. + # + # <% cache notification.event do %> # => nil + def resource_cache_call_pattern + /\A(?:<%#.*%>\n?)?<% cache\(?\s*(\w+\.?)/ + end + private def valid_encoding(string, encoding) |