Rails 3 Nester_Form Gem:如何自定义模板?

时间:2011-10-05 12:21:19

标签: ruby-on-rails-3 rubygems nested-forms

我正在使用rails 3 gem nested_forms,并希望更改生成插入的默认蓝图的方式。我无法弄清楚这些代码将来自何处/何处,以及我将如何/在何处添加代码来修改它。

我目前正在使用部分表格:

/app/views/units/_unit.html.haml

%tr
  %td=f.text_field :units 
  %td=f.text_field :dispatched
  %td=f.text_field :onscene
  %td=f.text_area  :actions

调用partial:

的代码段

/app/vies/reports/_form.html.haml

...    
%table.units
  %th Unit
  %th Dispatched%th On Scene
  %th Actions
=f.fields_for :units

%p= f.link_to_add "Add a unit", :units
...

除模板外,我的所有核心功能都有效。这是由gem在运行时自动创建的。此模板导致非常简单的HTML标记用于模板。

类似于以下内容:

<div id="units_fields_blueprint" style="display:none">
  <p class="fields">
    <input id="report_units_attributes_new_units_unit" name="report[units_attributes][new_units][unit]" size="30" type="text">
    <input id="report_units_attributes_new_units_dispatched_1i" name="report[units_attributes][new_units][dispatched(1i)]" type="hidden" value="2011">
    ...
  </p>
</div>

我希望蓝图能够获得部分表格格式,我只是不知道如何到达那里。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

当放置在蓝图div中时,仅包含表行的部分(如上面列出的)将不是有效标记。

以下代码无效标记。

<div>
  <tr>
    <td>Content</td>
  </tr>
</div>

某些浏览器(例如chrome)会尝试纠正这个糟糕的标记,这是通过剥离tr和td标记来完成的。

要使这种类型的代码与nested_form一起使用会很复杂,需要在javascript字符串中创建蓝图,并且需要修改构建器以自动停止在代码块中插入插入的代码。

这些更改在issue #73 for nested_form中解决,它引用由github用户elmatou创建的分支。

获得类似外观的另一个选择是使用div和spans并使用CSS创建网格结构。这是一个CSS密集型过程,但允许使用nested_form而无需更改。