Rails: Serializowanie obiektów w bazie danych?

Szukam ogólnych wskazówek dotyczących serializacji obiektów w bazie danych.

  1. Czym są obiekty serializowane?
  2. Jakie są najlepsze scenariusze serializacji obiektów w DB?
  3. jakich atrybutów używasz podczas tworzenia kolumny w DB, aby można było użyć obiektu serializowanego?
  4. Jak zapisać obiekt serializowany?
  5. i jak uzyskać dostęp do serializowanego obiektu i jego atrybutów? (Używając hashów?)
Author: keruilin, 2010-06-02

4 answers

Serializacja-proces polegający na przekształceniu struktury danych lub obiektu w sekwencję bitów, który może być przechowywany w pliku, buforze pamięci lub przesyłany przez łącze sieciowe, aby później zostać "wskrzeszony" w tym samym lub innym środowisku komputerowym. (patrz http://en.wikipedia.org/wiki/Serialization )
  1. Tak serializowane obiekty (w kontekście ActiveRecord) to tekstowe / łańcuchowe reprezentacje obiektów (zakodowane za pomocą YAML). Po serializacji możesz zapisać (prawie) dowolny obiekt Ruby w jednym polu bazy danych.

  2. Możesz użyć serializacji, jeśli masz dość złożone obiekty, które musisz zapisać w bazie danych i nie musisz pobierać rekordów na podstawie zawartości serializowanego atrybutu. Użyłem ich na przykład do przechowywania preferencji dla użytkowników aplikacji webapp: preferencje były w zasadzie hashe, które chciałem zapisać w jednym db pole.

3./4./5. Użyj ActiveRecord:: Base.serialize jako zasugerował Marc-André Lafortune:

class User < ActiveRecord::Base
  serialize :preferences
end

u = User.new
u.preferences = {:show_tooltips => true, :use_extended_menu => false, ...}
u.save

# ...

u = User.find(23)
u.preferences # => {:show_tooltips => true, :use_extended_menu => false, ...}
 52
Author: severin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-02 18:03:52

Naprawdę proste. Sprawdź doc dla ActiveRecord::Base.serialize.

 8
Author: Marc-André Lafortune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-02 05:00:09
 2
Author: astropanic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-03 11:27:18

Jeśli używasz Rails 4 z Postgresql, Rails 4 obsługuje pole hstore, które może przechowywać hasze i pozwala również na zapytania. http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013

 0
Author: Gogu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 06:45:21