Я сейчас пытаюсь сохранить информацию для счета / счета. На счете я хочу показать, из чего состоит общая цена. Процедуры и предметы, их цена и кол-во. В итоге я надеюсь, что это будет выглядеть так:
Consult [date] [total_price]
Procedure_name [price] [qty]
Procedure_name [price] [qty]
Consult [date] [total_price]
Procedure_name [price] [qty]
etc...
Вся эта информация доступна через базу данных, но я хочу сохранить информацию в виде отдельной копии. Таким образом, если пользователь изменяет цену некоторых процедур, информация о счете остается верной. Я думал, что сделаю это путем сериализации и сохранения данных в столбце (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]" (также пытался зацикливаться), но он только выбрасывает безошибочные ошибки назад.
Как отменить сериализацию данных из базы данных и превратить их в хеш, который я могу использовать?
Большое спасибо за любую помощь!