2010-06-13 46 views
0

我目前正在嘗試保存發票/帳單的信息。在發票上我想顯示總價是由什麼組成的。程序&項目,他們的價格和數量。所以,最後我希望得到它看起來像這樣:Rails:如何從數據庫反序列化?

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 

它保存到數據庫,如果我看看en嘗試在控制檯中我可以看到,它都在那裏:

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

(---問題---) 但我不能縫找回我的數據。我試着爲consult_data屬性定義一個變量,然後執行「variable.consult_problem」或「variable [:consult_problem]」(也試過循環),但它只是拋出了沒有方法錯誤。

如何反序列化數據庫中的數據並將其重新轉換爲我可以使用的哈希值?


非常感謝您的幫助!

回答

1

我想你應該確定類對象

IE的:

serialize :consult_data, Hash 

所以後來

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

+0

好,我已經試過了。 當我把它作爲「序列化:consult_data,哈希」 ,並試圖保存我得到這個,當試圖保存: 「consult_data應該是一個哈希,但是一個數組」 ----- 然後我試過「serialize:consult_data,Array」 它的工作原理! ----- 因爲它是一個數組(可能有多個諮詢),我還必須定義我想要的是哪一個。 「invoice.consult_data [0] [:consult_date] #does return the date」---- YAY! 非常感謝。 – Macint 2010-06-13 11:56:37