Rails: Serializowanie obiektów w bazie danych?
Szukam ogólnych wskazówek dotyczących serializacji obiektów w bazie danych.
- Czym są obiekty serializowane?
- Jakie są najlepsze scenariusze serializacji obiektów w DB?
- jakich atrybutów używasz podczas tworzenia kolumny w DB, aby można było użyć obiektu serializowanego?
- Jak zapisać obiekt serializowany?
- i jak uzyskać dostęp do serializowanego obiektu i jego atrybutów? (Używając hashów?)
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 )
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.
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, ...}
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
.
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
Zobacz MessagePack
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
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