Rails: Как я могу десериализовать из базы данных? - PullRequest
0 голосов
/ 13 июня 2010

Я сейчас пытаюсь сохранить информацию для счета / счета. На счете я хочу показать, из чего состоит общая цена. Процедуры и предметы, их цена и кол-во. В итоге я надеюсь, что это будет выглядеть так:

   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]" (также пытался зацикливаться), но он только выбрасывает безошибочные ошибки назад.

Как отменить сериализацию данных из базы данных и превратить их в хеш, который я могу использовать?


Большое спасибо за любую помощь!

1 Ответ

1 голос
/ 13 июня 2010

Я думаю, вы должны определить класс объекта

IE:

serialize :consult_data, Hash

Итак,

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

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...