Возможно, подойдет другой аксессор для вашей модели.
class Template < ActiveRecord::Base
serialize :settings
attr_accessor :settings_edit
before_save :handle_settings_edit, :if => lambda {|template| template.settings_edit.present? }
def settings_edit
read_attribute(:settings).inspect # should display your hash like you want
end
protected
def handle_settings_edit
# You may want to perform eval in your validations instead of in a
# before_save callback, so that you can show errors on your form.
begin
self.settings = eval(settings_edit)
rescue SyntaxError => e
self.settings = settings_edit
end
end
end
Тогда в вашей форме используйте <%= f.text_area :settings_edit %>
.
Я не тестировал ни один из этого кода, но теоретическион должен работать.Удачи!
ПРЕДУПРЕЖДЕНИЕ. Использование eval
, как это очень опасно, в этом примере пользователь может удалить всю таблицу шаблонов одной строкой в поле редактирования Template.destroy_all
.Используйте другой метод для преобразования строки в хеш, если используется пользовательский ввод.