我正在开发一个Ruby on Rails应用程序,其中一个数据库表有10列(pile_1到pile_10)。在模型中以10个元素的数组访问这些列会很方便。
感觉我应该能够强迫composed_of
做我想做的事,但我无法弄明白。任何人都可以启发我,或建议更好的策略吗?
答案 0 :(得分:6)
将
def piles
(1..10).map{ |num| self[ "pile_#{ num }"]}
end
不够吗?
答案 1 :(得分:2)
由于您有权更改架构,因此您应该这样做。将数组存储为表中的单独列是denormalized。您的架构是否规范化可能对您无关紧要,但您当前的难度是非规范化架构的直接结果。
你应该做的是创建一个新的表,像这样堆。我将使用postgres语法,因为这就是我所知道的。我不知道当前包含所有桩*列的表的名称,所以我将其称为“foo”:
create table piles (
id serial primary key,
foo_id int not null references foo(id),
value text not null,
);
你现在在foo中拥有的每一列都存在于一堆中。在桩的模型中,添加:
belongs_to: foo
在foo的模型中,添加:
has_many: piles
在您的控制器中,一旦掌握了foo,就可以使用foo.piles