2011-12-23 69 views
1

我需要從哈希表中生成一個表單並將其返回到其發佈的參數中。爲此,我創建了這個類。在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 %> 

使用適當的字段名稱正確生成表格,但只有問題是字段中沒有值。

如何解決這個問題?

回答

2

隨着fields_for你必須告訴它什麼形式構建應該結合(除了在accepts_nested_attributes_for的情況下,這是魚完全不同水壺),即做這樣的事情

<%= f.fields_for :live, f.object.live do |l|%> 

你也許能夠逃脫

<%= f.fields_for f.object.live %> 

但僅當可以提取我不認爲它可以在你的情況做自ActiveModel命名的東西在概念上是一流水平的東西的名字從對象「活」領域,不是實例的東西。