html.erb 为 css.erb 渲染后是否可以缓存来自动作的变量? Rails

Is it possible to cache a variable from a action after html.erb renders for css.erb? Rails

我有这个动作

class SearchesController < ApplicationController

  ...
  def results
    @users = User.search(params[:name], params[:gender])
    render 'user_results'
  end
  ...

问题是 rails 是 运行 再次通过此代码返回,因为当它呈现我的 user_results.css.erb 时,它给出了毫无疑问的结果,因为参数似乎不可用,我无论如何不想 运行 再次通过代码返回。

我试图通过执行 @users ||= User.search(params... 来缓存 @users 变量,但它 运行 无论如何都通过代码和我的 search 方法返回不同的结果当参数可用时 运行 第一次通过 user_results.html.erb

我该如何解决这个问题?

为什么你 运行 这个代码来自 user_results.css.erb?有必要吗?因为这对我来说是一种代码味道。如果您需要在此处呈现自定义 CSS,则只需使用单独的操作,不要将其命名为 results,将其命名为 user_results,这两个调用将是分开的。

要记住的是,实际上有 2 个不同的 Web 请求,一个到 HTML,一个到 CSS。在某些情况下,它们可以单独调用,不一定对所有浏览器都绑定在一起,这就是为什么这对我来说是一种代码味道,因为你在你的控制器中模糊了两者之间的界限。

为了更加清晰,请尝试将此添加到您的方法中:

logger.info "#{request.format}"

您还可以 enable/disable 基于以下格式的内容:

if request.format.html?

如果您要为 CSS 中的每个用户分配不同的颜色,那么我会将其作为内联 <style> 块移动到您的 HTML 中,并且那么您将不需要任何类型的缓存。我 99% 确定缓存在这里不是正确的事情。