Rails中如何从存储哈希结构的session变量内获取目标值
问题根源
你通过pp session[:numberofgifts]打印得到{"numberofgifts"=>"22"},说明session[:numberofgifts]对应的存储值本身就是一个字符串键的哈希对象,不是你预期的单独数值,所以直接在当前对象上调取值方法拿不到22是正常的。
正确取值方式
因为哈希的键是字符串类型的"numberofgifts",不是符号类型,直接按键取值即可:
<!-- 视图层直接输出22的写法 --> <%= session[:numberofgifts]["numberofgifts"] %>
如果后续需要做数值计算,把取到的字符串转成整数就行:
# 控制器/视图里转整数的写法 gift_count = session[:numberofgifts]["numberofgifts"].to_i
额外优化建议
你当前的session存储逻辑本身有问题:正常如果要存礼物数量,直接给session[:numberofgifts]赋数值即可,比如session[:numberofgifts] = 22,不需要把{ "numberofgifts" => "22" }整个哈希塞到这个键里,改完赋值逻辑后,后续直接调用session[:numberofgifts]就能拿到值,不用多一层哈希取值。
之前调用方法失效的原因
session[:numberofgifts].value:Ruby的哈希、字符串对象都没有内置.value这个实例方法,调用会抛出NoMethodErrorsession[:numberofgifts].last:哈希调用.last返回的是格式为[键, 值]的单键值对数组,也就是["numberofgifts", "22"],不会直接返回你要的数值22
内容的提问来源于stack exchange,提问作者Gibson
相关产品推荐
相关产品推荐

