从视图中设置cookie,然后从Rails中的Controller读取它

我想使用Javascript在Rails视图中设置cookie值,然后使用Controller来读取此cookie。 这可能与Rails有关,我应该怎么做呢?

我的情况:我有一个输入字段(比如地址),当用户第一次访问我的网站时,需要填写该输入字段。 然后,用户使用Omniauth登录。 我想坚持地址,直到他登录后。

更新:我能够在客户端添加到document.cookies。 但是,cookies [“something”]从Rails结尾返回nil。 以下是cookie哈希:

#"BAh7Ck==--776b2fcfcd63d3c84d2b1de5327e277499add6d4", "fbsr_1505068851081"=>"mqZeyvoRC"}, @signed=#<ActionDispatch::Cookies::SignedCookieJar:0x007 @parent_jar=#, @verifier=#>>

要在javascript中设置cookie,您可以执行以下操作:

document.cookie="something= test";

所以你可以添加一个事件(点击,提交,…)来从输入中获取值,并按照我上面提到的方式创建一个cookie。

在rails中,您可以像这样读取值:

cookies["something"]

如果需要,您还可以指定cookie何时在javascript中过期。

这可以解释你的问题。 显然你需要确保cookie的路径排成一行。

我如何读取由jquery设置的rails中的cookie

简答

  1. 安装MDN JavaScript Cookie框架

  2. 在你的js文件上:

     docCookies.setItem('my_cookie', 'my_cookie_value', '', '/'); 
  3. 在您的rails控制器上:

     cookies[:my_cookie] 

答案不是那么简短

Rails ActionDispatch :: Cookies默认指向应用程序根目录的cookie路径,而普通JavaScript默认将其指向当前路径

这意味着如果你没有声明路径,你最终会得到两个不同的cookie,这些cookie具有相同的名称并且令人头疼。

为了解决这个问题,您可以使用Chrome DevTools窗口中的“应用程序/ Cookie”,这样您就可以查看每个Cookie的所有详细信息,并在您通过“控制台”面板修改它们时重新加载它们的值。