のようなものを使用する必要があります。
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
の1行でテンプレートテーブル全体を削除できます。ユーザー入力が含まれている場合は、別の方法を使用して文字列をハッシュに変換します。
あなたがテキストエリアに表示するために何を期待していますか? '{:foo => 'bar'}'のようなもの? 1つの問題は、フォームにサブミットするときに、アプリケーションにロジックを追加しない限り、設定フィールドがハッシュではなく文字列としてシリアル化されることです。論理は好ましくはモデルに入るべきである。 –
正しい。私は '{:foo => 'bar'}'を見たいと思います。 – Shpigford