在Rails 4中设置/获取cookie的问题?

时间:2014-08-12 15:27:10

标签: ruby-on-rails cookies

  def index
    # cookies.signed[:affiliate] = params[:affiliate] (this works)

    # (the following doesn't work at all)
    # cookies.delete(:affiliate) (temp delete to test if working properly)

    if !cookies.present?
      cookies.signed[:affiliate] = {
        id: params[:affiliate],
        expires: 30.days.from_now
      }
    end
  end

在我看来,我有以下内容来显示cookie:

  <%= cookies.signed[:affiliate] || 'none' %>

在我的路线中:

  get ':affiliate', to: 'welcome#index'

我做错了什么?用例如下:

  1. 检查会员,如果没有,请忽略
  2. 如果设置了关联企业,则存储30.days.from_now到期的cookie(除非已过期,否则不允许该关联企业cookie被其他关联企业覆盖。
  3. 奖金问题:对于#2,我是否必须明确检查expires日期时间?或者.present?会为我照顾这个吗?

1 个答案:

答案 0 :(得分:1)

这不起作用的原因是因为cookies本身并不接受哈希。我使用JSON.generate创建cookie哈希和JSON.parse来检索数据。

还在||上添加了if条件以处理覆盖过期的cookie。

<强>控制器

  def index
    if cookies.blank? || !(JSON.parse(cookies.signed[:affiliate])['expires'] > DateTime.now)
      cookies.signed[:affiliate] = JSON.generate(
        id: params[:affiliate],
        expires: 30.days.from_now
      )
    end
  end

查看

  <%= JSON.parse(cookies.signed[:affiliate])['id'] %>


更新通知

这个答案部分有效。经过一些测试后,我意识到这在Chrome中运行良好,但在FireFox和Safari中无法实现。不知道为什么......有人随意发表评论。谢谢。留下答案,因为它确实部分回答了问题。