代码之家  ›  专栏  ›  技术社区  ›  Chowlett

RubyonRails:将几个列聚合到一个数组中

  •  1
  • Chowlett  · 技术社区  · 15 年前

    我正在开发一个RubyonRails应用程序,其中一个数据库表有10列(从第1列到第10列)。可以方便地将模型中的这些列作为10元素数组访问。

    感觉我应该可以强迫 composed_of 去做我想做的,但我不知道怎么做。有人能启发我,或者建议一个更好的策略吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Wayne Conrad    15 年前

    既然您有能力更改模式,那么应该这样做。将数组作为单独的列存储在表中是 denormalized .您的模式是否被规范化对您来说可能并不重要,但是您当前的困难是非规范化模式的直接结果。

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

        2
  •  6
  •   Farrel    15 年前

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

    不够?