ハッシュからフォームを生成し、そのハッシュで投稿されたパラメータを元に戻す必要があります。私はこのクラスを作成しました。Hash in Rails 3からフォームを生成する
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 %>
フォーム
は、適切なフィールド名を正しく生成されますが、唯一の問題は、フィールドがそれらの値を持っていないです。この問題を解決するにはどうすればよいですか?フォームの構築が(魚の全体の異なるやかんですaccepts_nested_attributes_for
の場合を除く)に特異的に結合するべきか、それを伝える必要がありfields_for
で