Update
высокого рейтинг ответ знакомства середины в ниже гораздо более подходящем Rails> = 3.1 ответа. Это отличный ответ для Rails < 3.1.
Возможно, это то, что вы ищете.
Form.find(:first).to_json
Update
1) Установить '' gem JSON:
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:
Это не совсем DRY, но я сделал все возможное. Если кто-то может исправить after_find
в модели User
, это будет здорово.
Я надеялся, что будет какая-то «магия» или плагин, но решение довольно прямолинейно и работает очень красиво. –
toby, можете ли вы изменить принятый ответ на этот вопрос? http://stackoverflow.com/a/6971678/190135 см. http://meta.stackexchange.com/questions/120568/is-it-possible-to-change-the-chosen-answer – AlexChaffee