I have the following.
class Page < ActiveRecord::Base
belongs_to :category
serialize :fields
end
The value of fields wi
I ran into a similar issue trying to use simple_fields_for on a Hash field type of a Mongoid model. The Mongoid version of your example I was dealing with looked like this:
class Page
include Mongoid::Document
field :fields, type: Hash
end
My situation might be slightly different though, as I already know the hash keys I am looking for ahead of time, and just needed simple_fields_for to work with the hash field. The naive method (basic fields_for usage) I was using looked like this:
= simple_form_for(@page) do |f|
= f.simple_fields_for :fields do |ff|
= ff.input :address
= ff.input :founded
But that wasn't populating the form properly. nicholaides's solution of wrapping the hash in a struct worked for me:
- require 'ostruct'
= simple_form_for(@page) do |f|
= f.simple_fields_for :fields, OpenStruct.new(@page.fields) do |ff|
= ff.input :address
= ff.input :founded
To avoid having to mix the OpenStruct stuff into my view, I created a monkey patch for simple_form to automatically wrap hash types in an OpenStruct and put it into an initializer:
require 'ostruct'
module SimpleForm::ActionViewExtensions::Builder
def simple_fields_for_with_hash_support(*args, &block)
if args[0] && !args[1]
field = object.send(args[0])
args << OpenStruct.new(field) if field.respond_to?(:has_key?)
end
simple_fields_for_without_hash_support(*args, &block)
end
alias simple_fields_for_without_hash_support simple_fields_for
alias simple_fields_for simple_fields_for_with_hash_support
end
And now I can use my original naive solution without special view code.