0

我有一个关于 cookie 的 Rails 4 问题,这让我整天头疼,没有解决方案。cookie 值发生变化,或者似乎会影响其他变量的值。我是 Rails 和一般编程的新手,我怀疑我误用了 cookie,但它肯定会很好用。

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

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

此代码有效:

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

瞧。每次从牌堆中随机抽取一张。

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

此代码失败,错误为“undefined method `<' 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

它所指的代码是这样的,在“测试”控制器的“新”操作中:

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

奇怪的是不仅没有 3 甚至一位数的 card_id,而且经过大量试验和错误后,我意识到 cookie 正在切断变量的第一个数字。此实例中选择的@id 不是 3,而是 33。当@id 为 40 时,它会查找 0。

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

4

1 回答 1

1

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

于 2013-11-24T02:43:37.877 回答