Caching模块用来实现caches_action/caches_page/fragment,普通用法没发现什么问题,问题在于使用下面的例子时,它不能缓存到正确的位置:
class CacheController < ApplicationController
caches_action :cache_one
caches_page :cache_two
#
end class TestController < ApplicationController
def one
render :inline => <<-EOS
Test::one<br />
<%= render_component :controller => 'cache', :action => 'cache_one' %>
EOS
end
def two
render :inline => <<-EOS
Test::two<br />
<%= render_component :controller => 'cache', :action => 'cache_two' %>
EOS
end
#
end cache_one和cache_two的实现就省略了。
访问直接访问这2个action,能够在正确的目录下生成缓存文件。不过访问test/one和test/two就会出现缓存错误,2个缓存文件被生成到CACHE_ROOT/test下,试想如果在多个地方使用render_component,就会产生很多份一样内容的缓存。
request会被传递给controller,当访问/test/one时,这个request保留有这个url。调用render_component时,会生成一个新的controller,这个request也被传递,不过url却还是/test/one,所以就有这个问题。
修复:
module ActionController #:nodoc:
module Caching
module Actions
class ActionCacheFilter #:nodoc:
def before(controller)
return unless @actions.include?(controller.action_name.intern)
url = controller.url_for(:controller => controller.controller_name, :action => controller.action_name)
if cache = controller.read_fragment(url.split("://").last)
controller.rendered_action_cache = true
controller.send(:render_text, cache)
false
end
end
def after(controller)
return if !@actions.include?(controller.action_name.intern) || controller.rendered_action_cache
url = controller.url_for(:controller => controller.controller_name, :action => controller.action_name)
controller.write_fragment(url.split("://").last, controller.response.body)
end
end
end
end
end
通过替换controller和action来解决,测试结果正确。
不过还有其它问题没修复,比如url中参数的问题,虽然调用render_component时我并没有传递参数,但它还是把参数给传递了。另外没有修复caches_page和fragment。
其实这个问题是由render_component带来的,所以最好的修复办法当然是修复这个方法,让它处理正确的controller/action/params,暂时还没找出修复方法。
分享到:
相关推荐
Ruby on Rails Group我们的交易应用程序此应用程序可帮助学生根据自己的学科安排学习时间。 他们可以跟踪他们花费在学习特定主题上的时间。...设置打开控制台下载或git clone 光盘RoR-Capstone 运行bundle install
单个组织记录由以下JSON结构表示: { "id":"https://ror.org/013cjyk83", "name":"PSL Research University", "email_address":null, "ip_addresses":[ ], "established":2010, "types":[ "Education" ], ...
标题中的“ROR_lesson:乌迪米”很可能是指Ruby on Rails(RoR)的一堂课程,其中“乌迪米”可能是课程的特定主题或讲师的名字。Ruby on Rails是一种流行的开源Web应用程序框架,它基于Ruby编程语言,用于快速开发...
**RoR-Newsroom: 熨斗的Ruby on Rails项目** RoR Newsroom是一个基于Ruby on Rails(RoR)的Content Management System (CMS),专为实现特定的发布工作流程而设计。RoR,全称Ruby on Rails,是Ruby编程语言的一个...
Ruby on Rails,简称RoR,是一个基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“DRY”(Don't Repeat Yourself)原则和“Convention over Configuration”理念,使得开发...
Ruby on Rails,简称RoR,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,用于快速开发高效、可维护的Web应用。RoR的核心理念是DRY(Don't Repeat Yourself)和Convention ...
多人RoR2游戏应该快节奏而有趣。 但是,通常情况下,玩家会遇到战利品被盗或一名玩家主导游戏的问题。 显然,解决此问题的最佳方法是首先消除ho积的动机! ShareSuite是一款具有多种系统的mod,旨在共享您在整个...
RoR2Modifact 是一款针对游戏《雨中冒险2》(Rain of Rain 2)的模组,它的主要目标是为玩家提供自定义工件(Artifacts)的能力。工件在《雨中冒险2》中扮演着至关重要的角色,它们为玩家的角色提供了各种独特的效果和...
Rails,全称 Ruby on Rails,是由 David Heinemeier Hansson 创建的开源 Web 应用程序框架,它遵循 Model-View-Controller(MVC)架构模式,强调“约定优于配置”和“DRY(Don't Repeat Yourself)”原则,以简化...
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 ...服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...
您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用其他标记语言。
自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: ...服务(作业队列、缓存服务器、搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。
自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...
您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明… 如果您不打算运行rake doc:app请随意使用其他标记语言。
==自述 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: ...服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ... 如果您不打算运行rake doc:app,请随意使用其他标记语言。
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 ...服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...
rigsofrods.org 的运行由此源代码运行。 您可以自由地提出建议和建议。...git clone https://github.com/Zentro/ror-website.git . npm install npm run build 编译和热重装以进行开发 npm run serve
这是RestApi的Rails测试创建选项rails new my-api --api --no-sprockets -d mysql码头工人docker compose up -d开始(建议阅读) rails db:drop db:create db:migraterails sRuby版本:2.7.1 Rails版本:6.0.3.4更...
更新版本1.1 即将推出的功能 UI重新设计 图像上传持久性 费用出口 TransactApp-Ruby on Rails Web应用程序 TransactApp允许用户创建一个帐户并登录以对提交的任何交易进行分组 目录 关于该项目 ...
Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”,提供了一套完整的工具链,使得开发者...