Rails:动态生成表单的最佳方式

时间:2010-07-20 21:32:07

标签: ruby-on-rails ruby forms

我正在创建一个应用程序,我想从企业系统中添加有关表字段的元数据。

我有一个table_structure模型,用于检索表定义信息,如:

table_name
field_name
Field_type
field_length
...

特定字段可能存在于多个表中,如:

tableA
fieldX

tableB
fieldX

无论表格如何,我都想在字段中添加属性以便

fieldX :has_many :attributes

,属性模型将是

:field
:attribute
:value

我想创建一个单独的表单,我可以捕获许多属性。我已经看到了嵌套表单railscast,这与我想要做的很接近,但是我希望动态生成不同输入类型的表单,因为捕获的属性可能会发生变化。

我正在考虑将此方法添加到属性模型中,并以某种方式迭代它们并生成表单。

  def self.attributes_types
    {'Business Essential' => {:field_type=>:radio,:values=>[:y,:n,nil],:default_value=>nil}}

    {'Owner' => {:field_type=>:text}}
  end

嵌套是否可行?我不是在字段中添加字段,只是属性,所以我可以将params [:field]传递给 new 并将其用于我的新属性。还有另一种方法来创建这种形式吗?

3 个答案:

答案 0 :(得分:0)

我认为你走在正确的轨道上,属性的嵌套字段是要走的路。如果将来要引入新属性,您可能希望将属性定义存储在数据库表中,而不是在模型中定义它们。

答案 1 :(得分:0)

我通常不推荐面向文档的数据库系统,但这可能是MongoDB的一个很好的候选者,而不是传统的SQL后端。无论后端如何,嵌套表单都是可行的方法。您可以构建一些帮助程序,以根据存储在数据库中的元数据将它们动态添加到表单中。

答案 2 :(得分:0)

您正在寻找的是动态表单,您的问题的答案是以动态形式表达的403。 http://railscasts.com/episodes/403-dynamic-forms https://github.com/railscasts/403-dynamic-forms

它有点晚了,但我希望它可以帮助别人