从视图中设置一个cookie,然后从Rails中的Controller中读取它
Set a cookie from view, then read it from Controller in Rails
我想使用Javascript在Rails视图中设置cookie值,然后使用Controller读取这个cookie。Rails有可能做到这一点吗?我应该怎么做?
我的情况:我有一个输入字段(比如地址(,用户第一次来我的网站时需要填写。然后用户使用Omniauth登录。我想坚持地址,直到他登录后。
更新:我能够在客户端上添加到document.cookies。然而,cookies["something"]从Rails端返回nil。下面是cookie哈希:
#<ActionDispatch::Cookies::CookieJar:0x007 @secret="f4d518c0b2", @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=false, @closed=false, @cookies={"_myapp_session"=>"BAh7Ck==--776b2fcfcd63d3c84d2b1de5327e277499add6d4", "fbsr_1505068851081"=>"mqZeyvoRC"}, @signed=#<ActionDispatch::Cookies::SignedCookieJar:0x007 @parent_jar=#<ActionDispatch::Cookies::CookieJar:0x007fdf...>, @verifier=#<ActiveSupport::MessageVerifier:0x007fdfa34548d8 @secret="f4d518c0b2e9d8", @digest="SHA1", @serializer=Marshal>>>
要用javascript设置cookie,可以执行以下操作:
document.cookie="something= test";
因此,您可以添加一个事件(点击、提交…(来从输入中获取值,并按照我上面提到的方式创建cookie。
在rails中,您可以读取这样的值:
cookies["something"]
如果需要,您还可以用javascript指定cookie何时过期。
简短回答
-
安装MDN JavaScript Cookie框架
-
在你的js文件上:
docCookies.setItem('my_cookie', 'my_cookie_value', '', '/');
-
在您的轨道控制器上:
cookies[:my_cookie]
答案不那么简短
Rails ActionDispatch::Cookies默认将cookie路径设置为应用程序的根,而纯JavaScript则默认为当前路径。
这意味着,如果你不声明路径,你最终会得到两个不同的cookie,它们的名称相同,令人头疼。
为了解决此问题,您可以使用Chrome DevTools窗口上的"应用程序/cookie",这样您就可以看到每个cookie的所有详细信息,并在通过"控制台"面板修改它们时重新加载它们的值。
这可以解释您的问题。显然,你需要确保饼干的路径对齐。
如何读取jquery 设置的rails中的cookie
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何从rails中的代码中删除新行( )
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- Rails File_field最大堆栈大小
- angularjs+rails应用程序中未显示模板
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- 如何用数据预加载表单(新操作),然后在Ruby on Rails中提交
- 我需要在两个模型(rails)之间创建一个新关系,然后通过javascript更改关系模型的属性
- 在会话中传递所选国家(下拉)的值,然后重新加载当前页面(Rails 4)
- 在rails中创建JSON对象,然后使用jQuery/Ajax从操作中获取JSON的正确方法是什么?
- 如何使用Ajax调用更新部分,然后在Rails中呈现
- 从视图中设置一个cookie,然后从Rails中的Controller中读取它
- 使用 ajax 在 Rails 应用程序中预加载页面,然后在主布局中显示它