2011-04-21 89 views
1

我在Rails应用程序中创建了一个ruby应用程序,该应用程序存储用户最喜欢的出版物,并且偶然遇到问题并需要一些帮助。rails 3动态创建存储在数据库表中的属性的模型

用户能够根据自己的选择添加尽可能多的不同类型的出版物,例如书籍,电影,报纸,文章等。每种出版物类型都有不同的属性,例如书籍可能有作者和出版商,以及一部电影可能有导演和制片人。单一出版物有许多属性。

我的应用程序当前看起来像这样:我有一个出版物资源存储类型的出版物。有一个名为attribs的资源,该资源存储特定发布的所有属性。最后还有第三个资源,名为收藏夹

class Publication < ActiveRecord::Base 
has_many :attribs 

# columns in this model => name, hidden 

# example (:name => "movie", :hidden => false) 
end 

class Attrib < ActiveRecord::Base 
belongs_to :publication 

# columns in this model => publication_id, name, datatype 

# example (:publication_id => 1, :name => "Movie Title", :datatype => "string") 
 # example (:publication_id => 1, :name => "Director", :datatype => "string") 
end 

class Favourite < ActiveRecord::Base 

# columns in this model => data, reason 

# example (:data => "[serialized form data]", :reason => "some reason why its a fav") 

end 

当用户创建新的最喜欢的,并且选择的出版物,我想一个形式与用户选择了该特定发布的属性来生成。

有没有一种方法,我可以动态地创建一个模型/表单与存储在数据库表中的属性?

由于Formtastic是一个动态表单生成器,可以用它来创建表单吗?

对我来说,这似乎过于复杂,但我不能想出另一种方式来做到这一点,而没有在我的应用程序中有非常大量的表。

回答

1

Formtastic和简单的形式宝石需要一个模型来呈现为您生成的形式。看看这个帖子here。创建一个无表模型。然后使用无表模型创建一个临时模型。然后从保存该模型的列值的表中获取临时模型的列,就像在该链接中为Foo所做的那样。使用临时类的实例,您可以使用Formtastic并为其生成表单。

0

我想你可以自己实现它。

@publication.attribs.each do |attrib| 
    case attrib.datatype 
    when "string" 
    f.text_field attrib.name 
    when "text" 
    f.text_area attrib.name 
    when "password" 
    f.password_field attrib.name 
    ... 
end