我正在开发一个 Ruby on Rails 应用程序,其中我的一个数据库表有 10 列(pile_1 到 pile_10)。将模型中的这些列作为 10 元素数组访问会很方便。
感觉我应该能够强迫composed_of
我做我想做的事,但我不知道怎么做。谁能启发我,或提出更好的策略?
我正在开发一个 Ruby on Rails 应用程序,其中我的一个数据库表有 10 列(pile_1 到 pile_10)。将模型中的这些列作为 10 元素数组访问会很方便。
感觉我应该能够强迫composed_of
我做我想做的事,但我不知道怎么做。谁能启发我,或提出更好的策略?
将
def piles
(1..10).map{ |num| self[ "pile_#{ num }"]}
end
不够?
由于您有权更改架构,因此您应该这样做。将数组作为单独的列存储在表中是非规范化的。你的模式是否被规范化对你来说可能并不重要,但你当前的困难是非规范化模式的直接结果。
你应该做的是创建一个新的表,堆,像这样。我将使用 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