Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
cf5bc0dd
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cf5bc0dd
编写于
7月 21, 2016
作者:
K
Kasper Timm Hansen
提交者:
GitHub
7月 21, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #25616 from ignatiusreza/callable_cache_key
Bring back support for callable cache key when rendering collection
上级
b334c19c
714c763d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
5 deletion
+30
-5
actionpack/test/controller/caching_test.rb
actionpack/test/controller/caching_test.rb
+11
-1
actionview/lib/action_view/helpers/cache_helper.rb
actionview/lib/action_view/helpers/cache_helper.rb
+12
-3
actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb
...tion_view/renderer/partial_renderer/collection_caching.rb
+7
-1
未找到文件。
actionpack/test/controller/caching_test.rb
浏览文件 @
cf5bc0dd
...
...
@@ -393,9 +393,14 @@ def index_with_comment
@customers
=
[
Customer
.
new
(
'david'
,
1
)]
render
partial:
'customers/commented_customer'
,
collection:
@customers
,
as: :customer
,
cached:
true
end
def
index_with_callable_cache_key
@customers
=
[
Customer
.
new
(
'david'
,
1
)]
render
partial:
'customers/customer'
,
collection:
@customers
,
cached:
->
customer
{
'cached_david'
}
end
end
class
Automatic
CollectionCacheTest
<
ActionController
::
TestCase
class
CollectionCacheTest
<
ActionController
::
TestCase
def
setup
super
@controller
=
CollectionCacheController
.
new
...
...
@@ -438,6 +443,11 @@ def test_caching_works_with_beginning_comment
assert_equal
1
,
@controller
.
partial_rendered_times
end
def
test_caching_with_callable_cache_key
get
:index_with_callable_cache_key
assert_customer_cached
'cached_david'
,
'david, 1'
end
private
def
assert_customer_cached
(
key
,
content
)
assert_match
content
,
...
...
actionview/lib/action_view/helpers/cache_helper.rb
浏览文件 @
cf5bc0dd
...
...
@@ -130,9 +130,10 @@ module CacheHelper
#
# When rendering a collection of objects that each use the same partial, a `cached`
# option can be passed.
#
# For collections rendered such:
#
# <%= render partial: '
notifications/notification', collection: @notification
s, cached: true %>
# <%= render partial: '
projects/project', collection: @project
s, cached: true %>
#
# The `cached: true` will make Action View's rendering read several templates
# from cache at once instead of one call per template.
...
...
@@ -142,13 +143,21 @@ module CacheHelper
# Works great alongside individual template fragment caching.
# For instance if the template the collection renders is cached like:
#
# #
notifications/_notification
.html.erb
# <% cache
notification
do %>
# #
projects/_project
.html.erb
# <% cache
project
do %>
# <%# ... %>
# <% end %>
#
# Any collection renders will find those cached templates when attempting
# to read multiple templates at once.
#
# If your collection cache depends on multiple sources (try to avoid this to keep things simple),
# you can name all these dependencies as part of a block that returns an array:
#
# <%= render partial: 'projects/project', collection: @projects, cached: -> project { [ project, current_user ] } %>
#
# This will include both records as part of the cache key and updating either of them will
# expire the cache.
def
cache
(
name
=
{},
options
=
{},
&
block
)
if
controller
.
respond_to?
(
:perform_caching
)
&&
controller
.
perform_caching
name_options
=
options
.
slice
(
:skip_digest
,
:virtual_path
)
...
...
actionview/lib/action_view/renderer/partial_renderer/collection_caching.rb
浏览文件 @
cf5bc0dd
...
...
@@ -25,9 +25,15 @@ def cache_collection_render(instrumentation_payload)
end
end
def
callable_cache_key?
@options
[
:cached
].
respond_to?
(
:call
)
end
def
collection_by_cache_keys
seed
=
callable_cache_key?
?
@options
[
:cached
]
:
->
(
i
)
{
i
}
@collection
.
each_with_object
({})
do
|
item
,
hash
|
hash
[
expanded_cache_key
(
item
)]
=
item
hash
[
expanded_cache_key
(
seed
.
call
(
item
)
)]
=
item
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录