1

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

感觉我应该能够强迫composed_of我做我想做的事,但我不知道怎么做。谁能启发我,或提出更好的策略?

4

2 回答 2

6

def piles
    (1..10).map{ |num| self[ "pile_#{ num }"]}
end

不够?

于 2010-01-06T15:08:55.137 回答
2

由于您有权更改架构,因此您应该这样做。将数组作为单独的列存储在表中是非规范化的。你的模式是否被规范化对你来说可能并不重要,但你当前的困难是非规范化模式的直接结果。

你应该做的是创建一个新的表,堆,像这样。我将使用 postgres 语法,因为这是我所知道的。我不知道当前包含所有 piles* 列的表的名称,所以我将其称为“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

于 2010-01-06T19:50:13.977 回答