我应该在Ruby on Rails中使用引号或冒号作为会话密钥吗?

Goa*_*lie 5 ruby-on-rails

目前,我有,当我同时使用返回相同值的会话变量session["test"]session[:test].这两个是一样的吗?使用一个比另一个更好吗?

谢谢

pju*_*ble 5

在标准的Ruby Hash中,它们不一样(字符串与符号)

但是,rails SessionHash子类to_s在存储它们之前调用键,因此所有键都存储为字符串(即使您指定了符号):

class SessionHash < Hash

  def [](key)
    load_for_read!
    super(key.to_s)
  end

  def []=(key, value)
    load_for_write!
    super(key.to_s, value)
  end
Run Code Online (Sandbox Code Playgroud)

这就是为什么session[:test]并将session["test"]在rails中返回相同的值.