【发布时间】:2011-04-14 23:47:35
【问题描述】:
我想解决一个设计问题。
我正在构建一个 Rails 3 应用程序,该应用程序将包含来自各种不同公司的产品。我想定义一大组字段,每个产品都可以选择适用的字段。
字段类型将是单行文本字段、多行文本字段、单选或选择选项、复选框选项、日期、持续时间或更自定义的内容。我需要能够基于此类型动态呈现字段以进行编辑和显示。
我目前的想法是使用 MongoDB 并将所有内容存储在产品的哈希中。
class Product
include Mongoid::Document
def self.field_definitions
[{ :name => :code, :label => 'Code' },
{ :name => :itinerary, :type => :multiline, :label => 'Itinerary', :category => :tour},
{ :name => :infant_age, :type => :age_range, :label => 'Infante age range', :category => :tour},
...
]
end
embedded_in :company
field :field_data, type:Hash
end
然后渲染字段以进行新/编辑,例如:
= form_for Product.new do |f|
= f.fields_for :field_data do |f|
%ol
- Product.field_definitions.each do |field_definition|
%li
= f.label field_definition[:name], field_definition[:label]
= render "products/edit_fields/#{field_definition[:type] || 'singleline'}", :f => f, :field_definition => field_definition
= f.submit "Create"
然后,我对每个字段类型都有一个部分用于编辑和显示。
创建后,产品在 mongodb 中可能如下所示:
{"field_data":{
"itinerary": "FUN!",
"code": "AHKDYK",
"infant_age": { "max": 2, "min": 0 }
}}
这是一个好方法吗?
【问题讨论】:
标签: ruby-on-rails ruby architecture mongodb mongoid