我正在设计一个具有多种“请求”的应用程序,这些请求将以非常相似的性质处理,但它们包含不同的数据。
他们每个人都有大约1/3的信息相同,日期,用户信息等。
但是,不同类型的请求具有完全不同的信息,并且请求在数据库中可以包含大约30列。
即。
Form A
Date Submitted
User
Email
Provider
Attribute A
Attribute B
Attribute C
Attribute D
然后
Form A
Date Submitted
User
Email
Provider
Attribute E
Attribute F
Attribute G
Attribute H
最后我会有大约40个模型,所以不希望有单独的表格。
表示这一点的最佳方法是什么,我需要完全控制节目和表格的布局。
我之前使用HStore(使用postgres)完成了这项工作,并且想知道是否还有其他建议。
[编辑]
模型中相同属性的示例:
:company_name,:contact_person,:physical_address,:contact_email,:contact_phone
表格A的例子:
:mobile_current_provider,:num_mobile_connections,:num_smartphones,:operating_system,:num_high_voice_users
表格B的例子
:kw_per_month, :weekend_power, :three_phase_power, :seasonal_difference
大多数字段都是字符串或整数(带有一些布尔值),但都可以强制转换为字符串。大多数数据仅用于显示,而不是用于搜索和计算等的共同字段
答案 0 :(得分:1)
在阅读添加的属性示例后,我的印象是他们最好属于其他模型。
我的建议是再创建两个ActiveRecord模型:MobileUsage
和ElectricityUsage
class User < ActiveRecords::Base
has_one :mobile_usage
has_one :electricity_usage
end
class MobileUsage < ActiveRecords::Base
belongs_to :user
end
class Electricity < ActiveRecords::Base
belongs_to :user
end
好处:
然后,对于表单A,您只需以嵌套形式加载移动使用的属性即可。用户的属性将保存到用户,移动信息将通过引用保存到移动设备。表格B是类似的。
通过分离,您甚至可以让用户先填写基本信息,然后再详细说明。
答案 1 :(得分:0)
您不需要多个表,因此您可以使用STI
class A < C
class B < C
class C < ActiveRecord::Base
您的C表将包含所有列,共享列,A字段和B字段。