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% 确定缓存在这里不是正确的事情。
我有这个动作
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% 确定缓存在这里不是正确的事情。