Мне нужно сгенерировать форму из хэша и вернуть ей опубликованные параметры в хэше. для этого я создал этот класс.
class Hashit
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(hash)
hash.each do |k, v|
self.class.send(:attr_accessor, k.to_sym)
if v.class.name == "ActiveSupport::HashWithIndifferentAccess"
self.send("#{k}=", Hashit.new(v))
else
self.send("#{k}=", v)
end
end
end
def persisted?
true
end
end
теперь, например, у меня есть settings
хэш. {:live=>{:title=>"Live Title"}, :staging=>{:title=>'Staging Title'}}
преобразовать его в объект с помощью @settings_obj = Hashit.new(settings)
, а затем использовать simple_form для генерации формы для него.
<%= simple_form_for @settings_obj, :url => app_settings_url do |f| %>
<%= f.fields_for :live do |l| %>
<%= l.input :title %>
<% end %>
<%= f.fields_for :staging do |s| %>
<%= s.input :title %>
<% end %>
<%= f.submit %>
<% end %>
Форма генерируется правильно с правильными именами полей, но проблема заключается только в том, что поля не имеют значений.
Как решить эту проблему?