在Rails中更改Cookie值的问题3

Dex*_*Dex 5 cookies ruby-on-rails

我正在尝试在之前的过滤器中为用户位置更改Cookie但遇到问题:

如果cookie不存在,则会正确设置为1,但不会永久保存,并且对于任何后续请求都会恢复为1.

  def remember_location(loc = nil)
    cookies.permanent[:location] = 1 if cookies[:location].nil?
    loc = Location.find(loc).try(:id) rescue nil
    unless loc.nil?
      # cookies.delete :location    # => this doesn't work either
      cookies.permanent[:location] = loc
    end
    cookies[:location]
  end
Run Code Online (Sandbox Code Playgroud)

Dex*_*Dex 1

问题就在这里。由于数据库未完全填充,我随后输入的位置给出了 Rails 错误。除非整个端点请求成功完成,否则 cookie 实际上不会被保存。

查看 ActionDispatch::Cookies 的源代码后,情况似乎确实如此: http: //api.rubyonrails.org/classes/ActionDispatch/Cookies.html