【问题标题】:Rails: How do I unserialize from database?Rails:如何从数据库中反序列化?
【发布时间】:2010-06-13 10:51:30
【问题描述】:

我目前正在尝试保存发票/账单的信息。在发票上,我想显示总价是由什么组成的。程序和项目,它们的价格和数量。所以最后我希望让它看起来像这样:

   Consult [date] [total_price]
      Procedure_name [price] [qty]
      Procedure_name [price] [qty]
   Consult [date] [total_price]
      Procedure_name [price] [qty]
   etc...

所有这些信息都可以通过数据库获得,但我想将这些信息保存为单独的副本。这样,如果用户更改某些程序的价格,发票信息仍然是正确的。我想我会通过序列化数据并将数据保存到 Invoice 表中的列 (consult_data) 来做到这一点。


我的模特:

class Invoice < ActiveRecord::Base
   ...stuff...
   serialize :consult_data
   ...
end

这是我从表格中得到的(1 个咨询和 3 个程序):

{"commit"=>"Save draft", "authenticity_token"=>"MZ1OiOCtj/BOu73eVVkolZBWoN8Fy1skHqKgih7Sbzw=", "id"=>"113", "consults"=>[{"consult_date"=>"2010-02-20", "consult_problem"=>"ABC", "procedures"=>[{"name"=>"asdasdasd", "price"=>"2.0", "qty"=>"1"}, {"name"=>"AAAnd another one", "price"=>"45.0", "qty"=>"4"}, {"name"=>"asdasdasd", "price"=>"2.0", "qty"=>"1"}], "consult_id"=>"1"}]}

我的保存操作:

  def add_to_invoice
   @invoice = @current_practice.invoices.find_by_id(params[:id])
   @invoice.consult_data=params[:consults]
   if @invoice.save
    render :text => "I think it worked"
   else
    render :text => "I don't think it worked'"
   end
  end

它确实保存到数据库中,如果我查看控制台中的条目,我可以看到它就在那里:

consult_data: "--- \n- !map:HashWithIndifferentAccess \n  consult_da..."

(---问题---) 但我无法接缝取回我的数据。我尝试为consult_data 属性定义一个变量,然后执行“variable.consult_problem”或“variable[:consult_problem]”(也尝试循环),但它只会向我抛出无方法错误。

如何反序列化数据库中的数据并将其转换回我可以使用的哈希?


非常感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby serialization


    【解决方案1】:

    我认为你应该确定对象的类别

    IE:

    serialize :consult_data, Hash
    

    那么

    invoice = Invoice.last
    invoice.consult_data[:date] # will return date
    

    【讨论】:

    • 好的,我试过了。当我将它作为“序列化:consult_data,哈希”并尝试保存时,我得到了这个,当尝试保存时:“consult_data 应该是一个哈希,但是是一个数组”-----然后我尝试了“序列化:咨询数据,数组”,它的工作原理! ----- 因为它是一个数组(可以有多个咨询),我还必须定义我想要的。 “invoice.consult_data[0][:consult_date] #确实返回日期”---- YAY!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多