在我的一个观点中的应用程序中,我从Cookie
添加Controller
,并根据此Cookie
,我为我的变量设置了一个值(这将是在我的观点中使用)。
class SomeController < ApplicationController
def a_action
if params[:utm] == 'a'
cookies[:user_cookie] = {value: 'a', expires: 1.day.from_now}
else
cookies[:user_cookie] = {value: 'b', expires: 1.day.from_now}
end
if cookies[:user_cookie] == 'a'
@variable = 'a'
else
@variable = 'b'
end
end
在我看来a_action#some
,我正在做:
%h1= @variable
当用户进入a_action#some
视图时,cookies[:user_cookie]
设置为用户的浏览器Cookie,但我的视图或控制器不会读取 Cookie
值,直到下次刷新。因此,我的视图中的@variable
会变成错误的值/根本没有价值。
是否可以在加载页面后阅读Cookie
,以便我的@variable
始终有值而不需要等待下一次刷新?
答案 0 :(得分:0)
Cookie是客户端功能。您的服务器只能在有请求时读取cookie,即在您的控制器操作中。
在页面加载后读取cookie的唯一方法是使用Javascript::not(:first-child)
https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie
http://clubmate.fi/setting-and-reading-cookies-with-javascript/