Rails 4 Cookie问题 - 切换值和其他变量的干扰

时间:2013-10-24 22:42:54

标签: ruby-on-rails-4

我有一个关于Cookie的Rails 4问题一直让我头疼,没有解决方案。 cookie值发生变化,或者似乎影响其他变量的值。我是Rails和一般编程的新手,我怀疑我错误地使用了cookie,但是确实很有用。

该应用程序有一副牌,一堆小,并从那堆中选择一张牌。卡片选择是发生错误的地方。

所有代码都在application_controller.rb中。我将cookie [:pile]存储为card_ids数组作为字符串,并在需要时对其进行数组处理。

此代码有效:

  def select_card_id
    @pile = cookies[:pile].split(',')
    i = rand(@pile.length - 1)
    @id = @pile[i]
  end

瞧。每次都是一张随机的卡片。

如果我想以较不随机的顺序循环显示卡片,应用程序必须知道接下来要拨哪张卡片,这就是Cookie失败的地方。

此代码失败,错误为“未定义方法”< for nil:NilClass“,意思是@pile变量。

  def select_card_id
    @pile = cookies[:pile].split(',')
    i = cookies[:index]

    if i < @pile.length
      @id = @pile[i]
      cookies[:index] += 1
    else
      cookies[:index] = 0
      @id = @pile[0]
    end
  end

情节变粗,因为我强制将cookies [:index]强制为一个整数,这是两倍的奇怪,因为我之前将它设置为0并且它不是错误的来源,但应用程序对于@pile正在缓和为零。

此代码失败,错误为“找不到ID = 3的卡”

 def select_card_id
    @pile = cookies[:pile].split(',')
    i = cookies[:index].to_i

    if i < @pile.length
      @id = @pile[i]
      cookies[:index] = i + 1
    else
      cookies[:index] = 0
      @id = @pile[0]
    end
  end

它所指的代码就是这个,在'test'控制器的'new'动作中:

@id = select_card_id
@card = Card.find(@id) 

奇怪的是,不仅没有card_id为3,甚至没有一个数字,但经过大量的反复试验后,我意识到cookie正在切断变量的第一个数字。在这个例子中选择的@id不是3,它是33.当@id是40时,它寻找0。

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

Cookies存储字符串。任何类型的转换都需要由应用程序代码完成。