通常在数据库中创建/更改表我使用迁移(手动运行rake db:migrate
)然后在我的代码中使用ActiveRecord。这非常酷,因为我不必担心数据库中的数据表示以及特定类型的db(sqlserver,pg或其他)。
但现在客户希望能够自己创建“东西”,比如说,他开始销售电脑,所以他想要一个界面,他可以动态创建一个具有“名称”等属性的对象“计算机” ,RAM,HD,......“。在db中使用所有这些字段创建单独的表似乎很自然。但是我怎么能在RoR中做到这一点并保留所有关于ActiveRecord的好东西?
请建议。
答案 0 :(得分:2)
通常的做法是完全相反:
这称为EAV(实体 - 属性 - 值模型,请参阅http://en.wikipedia.org/wiki/Entity-attribute-value_model)。它的规模非常糟糕。
或者,您可以使用store
文本列而不是大EAV表(请参阅http://api.rubyonrails.org/classes/ActiveRecord/Store.html),这样您就不必进行那些典型的EAV难度属性检索。您仍然需要存储“对象类型”定义的某个位置,因此在构建表单和表时可以使用预期的字段等。
此方法的问题在于您无法在这些属性上查询(where / join / select),因为它们不是列。有很多解决方案:
hstore
而不是简单的序列化列。答案 1 :(得分:1)
NoSQL数据库(文档数据库Mongodb,CouchDB)最适合这个或使用redis。根据我的想法,您可以使用Vertical Table concept尝试为MySQL运行Rails 2.x Demo of application。 您可以尝试使用Mongodb,检查是否需要。