未定义方法“caches_action”用于ApplicationController:Class。

6

我想升级到Rails 4 beta 1,但遇到了一些问题。

简而言之,这是我的应用控制器的样子。

class ApplicationController < ApplicationController
  caches_action :method
end

caches_action在Rails 4中被移动到其自己的宝石中,因此包含这个宝石应该可以解决问题。

gem "actionpack-action_caching", github: "rails/actionpack-action_caching"

但是当我运行我的请求规范或在浏览器中访问应用程序时,会出现此错误。
app/controllers/application_controller.rb:3:in `<class:ApplicationController>': undefined method `caches_action' for ApplicationController:Class (NoMethodError)

为什么会这样呢?

  • Rails 4.0.0.beta1
  • Ruby 2.0.0
  • Rspec 2.13.1

只是出于好奇,您在使用“caches_action”之前是否已经require 'actionpack-action_caching'了呢? - Aleksei Matiushkin
我刚刚尝试了 gem 'actionpack-action_caching', github: 'rails/actionpack-action_caching', require: "actionpack-action_caching",结果出现了 cannot load such file -- actionpack-action_caching (LoadError) 的错误。 - Linus Oleander
1
哦,抱歉。我看了一下代码,你需要require actionpack/action_caching而不是require 'actionpack-action_caching'(斜杠而不是减号)。由于缓存不再是核心的一部分,所以你需要在每个使用它的文件顶部显式地require它。 - Aleksei Matiushkin
1
require "actionpack/action_caching" 添加到 application.rb 中即可。请在下方回答并我会接受它。谢谢。 - Linus Oleander
2
我遇到了这个问题,而且建议的解决方案并没有解决它。有人可以帮忙吗? - Mark Fraser
3个回答

14

由于缓存不再是核心的一部分,您需要在每个使用它的文件顶部显式地引用它:

require 'actionpack/action_caching'

这个问题的回应表明你不需要显式地要求它:https://github.com/rails/actionpack-action_caching/pull/11 - Benjamin Sullivan

5

问题出在 Rails 4 中,他们将缓存部分提取到单独的 gem 中。

如果你遇到了动作缓存错误,则需要添加以下 gem:

gem 'actionpack-action_caching'

为了进行页面缓存,需要添加以下内容:

gem 'actionpack-page_caching'

我也试了一下,发现没有添加 gem 就可以做到同样的效果。希望这个方法有效,谢谢。

0

我正在使用Rails作为API rails new AppName --api 我通过添加以下内容使其工作

include ActionController::Caching

class ApplicationController < ActionController::API 中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接