На самом деле это легко.Вам нужно использовать класс с reader
методами.Вы можете создать его различными способами, но самый простой - использовать класс OpenStruct
(обратите внимание, что он не сможет видеть поля, которые находятся в методах экземпляра OpenStruct ... этот класс не может переопределять методы).
В вашей форме вы должны добавить:
<%= f.fields_for :wp_options, @profile.wp_options do |wp_options| %>
Вместо @profile (если у вас есть динамическая переменная) вы можете использовать f.object.wp_options
.
И к модели Profile
Вы должны добавить wp_options
метод.
def wp_options
OpenStruct.new(self.attributes['wp_options'])
end
В этом случае он будет работать только в том случае, если ваши сериализованные wp_options являются классом Hash.
Надеюсь, что это поможет.PS.Я использовал ту же технику, но поскольку у меня было type
хеш-ключей, OpenStruct не смог его создать, поэтому я использовал простой класс Struct.У меня был столбец data
:
def data
keys = current_data.keys
data = attributes[:data]
Struct.new(*keys).new(*keys.map { |k| data[k] })
end
Немного менее тривиальный, но в любом случае тот же подход (до этого я создал специальный класс, но теперь я знаю, что Struct - лучший способ его создания.Добрые дела. Больше идей вы можете найти здесь: Как использовать хеш-ключи в качестве методов в классе? )