我不知道这个问题叫什么,但是有没有可能通过以下方式在模型中创建一个列表:array of word
equipment %w[foo bar kimi etc...]
equipcost %i[10 35 85 etc...]
或enum
enum equipment: { foo: 10,
bar: 35,
kimi: 83,
etc...
}
然后将多个保存在数组中,即
t.string "equipment_list", default: [], array: true
{ equipment_list => ["foo", "bar"] } or { equipment_list => [10, 35] }
然后,当通过@object.equipment_list
调用该对象时,它将引用array of words
或enum
。
在视图中,我输入<%= @object.equipment_list %>
,并显示foo和bar,或者,如果我在模型中,我可以使用一个方法,将这些值相加,得到总成本:
def cost
e = self.equipment_list
e.value
e.inject(:+)
end
有没有ruby或rails的方法来实现这个目标?array of words
的方法似乎是错误的,emun
的方法只针对单个值。
我找到了this,但就像他们说的,它是一个索引,而不是实际值。
2条答案
按热度按时间dauxcl2d1#
将列序列化为数组很少是一种好方法。
您需要的是一个
equipments
表,其中包含列name
和cost
这个表与另一个模型相关联,我将其命名为
Store
,仅作为示例:mfuanj7w2#
将数据硬编码到应用程序中并不是一个好主意,除非您想在每次业务逻辑需要进行细微更改时更改代码,或者您喜欢在凌晨3点被调用。使用数组/JSON/HSTORE/Serialized text列实际上也不是一个好方法:
而是创建一个联接表,在该表中可以存储商店和设备之间的关系以及描述这两个企业实体之间关系的任何附加数据:
根据表/模型所连接的两个事物来命名表/模型只是一个非常懒惰的约定--尽可能使用一个更合适的名称,以符合该事物实际表示的业务逻辑。
这里的具体实现取决于你的业务逻辑,你必须考虑如何处理数量。如果你想得到设备的总成本,最简单的实现是: