ruby-on-rails - Rails session 存储模型对象

标签 ruby-on-rails ruby session ruby-on-rails-4 activerecord

我使用 session 来存储我的购物车对象

在我的购物车模型中,我有

def initialize
    @items = Array.new
end

def clean
    @items = Array.new
end 

我想使用 session 来存储整个购物车对象,这样我就可以使用上面的方法

像这样

@cart = session[:cart] ||= Cart.new

但是我的@cart输出很奇怪

第一次运行输出

<%= @cart %>
#<Cart:0x007efc844d3af0>

<% @cart.clean %>
true

一切都很好,但是第二次输出对象的内容

<%= @cart %>
{"items"=>[]}

<% @cart.clean %>
undefined method `clean'

session可以存储整个对象吗?

或者我做错了什么?

谢谢。

编辑:

<% session[:cart] = Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0>

<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
#<Cart:0x007efc868be0a0> #Because session[:cart] does not exist
<% session[:cart] = session[:cart] ||= Cart.new %>
<%= session[:cart] %>
{"items"=>[]} #Session does not store the cart object but store the cart object's content

编辑2:

<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] is nil so print Cart.new
<br>
<% session[:cart] = Cart.new %>
<% @cart = session[:cart] ||= Cart.new %>
<%= @cart %> #session[:cart] isn't nil so print session[:cart]

我得到的两个输出都是购物车对象

当我刷新页面并运行相同的代码时

<% @cart = session[:cart] ||= Cart.new %>

@cart 应该是 session[:cart],因为 session 不为零并且 session[:cart] 应该是 Cart 对象,但它输出“{”items”=>[]}”

编辑3:

第一次:

<%= session[:cart] %>
-> nil
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>

第二次:

<%= session[:cart] %>
-> {"items"=>[]} #Why it isn't a Cart object after I refresh?
<% session[:cart] = Cart.new %>
<%= session[:cart] %>
-> <Cart:0x00000007c112c0>

最佳答案

始终使用购物车对象。从 session 中初始化它,执行操作,最后将其序列化回 session 。

    class Cart
      def initialize(params={})
        @items = params[:items] || []
      end
    end

    controller:
    @cart = Cart.new(session[:cart])
    //do operations on cart

    session[:cart] = @cart

关于ruby-on-rails - Rails session 存储模型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441828/

相关文章:

php - 将 PHP 的 password_verify 转换为 Ruby on Rails

ruby-on-rails - Ruby on Rails : pretty print for variable. hash_set.inspect ...有没有办法在控制台中漂亮地打印 .inspect ?

java - tomcat 中的序列化问题会混淆用户 session 吗?

ruby-on-rails - 引用嵌入式资源 mongo mongoid ruby​​ rails

ruby-on-rails - #<Comment 的未定义方法 `user_id='

ruby-on-rails - Rails 中带有已定义关联的 form_for 第一个参数 nil 错误

ios - 在 iOS Swift 上弃用后 Twitter.sharedInstance().session()?.userName 的替代方案

没有 cookie 的 PHP session

css - 确定我有多少样式规则的方法

ruby-on-rails - 功能测试 Rails,没有路由匹配错误