尽管没有模型更改,Rails部分缓存仍显示视图更改

时间:2015-08-16 19:23:04

标签: ruby-on-rails ruby-on-rails-4 caching

遵循“使用Rails 4进行敏捷Web开发”的指南 它涵盖产品目录的缓存,仅重新呈现更改的产品。

我编辑过(config / environments / development.rb):

<UserControl
    x:Class="Helper.UserControls.UseCasePropertyDisplay"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Helper.UserControls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400"
    x:Name="Root">

    <StackPanel DataContext="{Binding ElementName=Root}"                                
                Orientation="Horizontal"
                Margin="260,0,0,0">
        <TextBlock Text="{Binding Label}"
                   Style="{StaticResource UseCaseTextBlock}"
                   x:Name="textblock_label"/>
        <TextBlock x:Name="textblock_propertyContent"
                   Text="{Binding Text}"
                   Style="{StaticResource UseCaseFrameWorkTextElement}"
                   DoubleTapped="textblock_DoubleTapped" />
        <TextBox x:Name="textbox_propertyContent"
                 Text="{Binding Text}"
                 Visibility="Collapsed"
                 Style="{StaticResource UseCaseTextBox}"
                 LostFocus="textbox_LostFocus" />
    </StackPanel>
</UserControl>

添加了返回最近更新产品的代码: (APP /模型/ product.rb)

config.action_controller.perform_caching = true

最后更新了缓存的商店索引: (应用程序/视图/存储/ index.html.erb)

def self.latest
  Product.order(:updated_at).latest
end

本书指出测试缓存是否正常的唯一方法是更改​​视图,所以我所做的只是在一个或两个缓存标记中添加一些lorem ipsum,但浏览器立即显示刷新后的更改......令人沮丧!任何线索?

2 个答案:

答案 0 :(得分:1)

尝试使用

<% cache ['v1', Product.order(updated_at: :desc).last] do %>

而不是

<% cache ['store', Product.latest] do %>

答案 1 :(得分:1)

您收藏的缓存密钥不会更改。之所以发生这种情况,是因为cache ['store', Product.latest]并不像您期望的那样聪明。如果您查看日志,您将看到所使用的缓存键是文字,包括 ActiveRecord :: Relation :: Products

使用最后 updated_at cache ['store', Product.latest.max(:updated_at)]获得更好的结果。

在Rails 5中,由于几周前的the addition of cache_key to ActiveRecord::Relation,这将更容易。