我有一个关于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。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
Cookies存储字符串。任何类型的转换都需要由应用程序代码完成。