Ruby on Rails:将多个列聚合到一个数组中

时间:2010-01-06 14:06:56

标签: ruby-on-rails ruby arrays aggregation

我正在开发一个Ruby on Rails应用程序,其中一个数据库表有10列(pile_1到pile_10)。在模型中以10个元素的数组访问这些列会很方便。

感觉我应该能够强迫composed_of做我想做的事,但我无法弄明白。任何人都可以启发我,或建议更好的策略吗?

2 个答案:

答案 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

访问其堆