Ruby on Rails: объединение нескольких столбцов в массив - PullRequest
1 голос
/ 06 января 2010

Я разрабатываю приложение Ruby on Rails, в котором одна из моих таблиц базы данных имеет 10 столбцов (от кучи_1 до кучи_10). Было бы удобно получить доступ к этим столбцам в модели как массив из 10 элементов.

Такое ощущение, что я должен быть в состоянии заставить composed_of делать то, что я хочу, но я не могу понять, как. Может ли кто-нибудь просветить меня или предложить лучшую тактику?

Ответы [ 2 ]

6 голосов
/ 06 января 2010

Будет

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

не хватает?

2 голосов
/ 06 января 2010

Поскольку у вас есть возможность изменить схему, вам следует. Хранение массива в виде отдельных столбцов в таблице денормализовано . Нормализуется ли ваша схема или нет, но ваша текущая сложность является прямым результатом денормализованной схемы.

Что вам нужно сделать, это создать новую таблицу, стопки, вот так. Я буду использовать синтаксис 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

...