Обновление
См. Высокоуровневый ответ середины ниже для более подходящего ответа Rails> = 3.1. Это отличный ответ для Rails <3.1. </p>
Вероятно, это то, что вы ищете.
Form.find(:first).to_json
Обновление
1) Установить 'json' gem :
gem install json
2) Создать класс JsonWrapper
# lib/json_wrapper.rb
require 'json'
class JsonWrapper
def initialize(attribute)
@attribute = attribute.to_s
end
def before_save(record)
record.send("#{@attribute}=", JsonWrapper.encrypt(record.send("#{@attribute}")))
end
def after_save(record)
record.send("#{@attribute}=", JsonWrapper.decrypt(record.send("#{@attribute}")))
end
def self.encrypt(value)
value.to_json
end
def self.decrypt(value)
JSON.parse(value) rescue value
end
end
3) Добавить модель обратного вызова:
#app/models/user.rb
class User < ActiveRecord::Base
before_save JsonWrapper.new( :name )
after_save JsonWrapper.new( :name )
def after_find
self.name = JsonWrapper.decrypt self.name
end
end
4) Проверьте это!
User.create :name => {"a"=>"b", "c"=>["d", "e"]}
PS:
Это не совсем СУХО, но я сделал все возможное. Если кто-то сможет исправить after_find
в User
модели, это будет здорово.