データベーステーブルの1つに10列(pile_1からpile_10)があるRubyonRailsアプリを開発しています。モデル内のこれらの列に10要素の配列としてアクセスすると便利です。
composed_of
自分のやりたいことを強要できるはずなのに、どうしたらいいのかわからない。誰かが私を啓発したり、より良い戦術を提案したりできますか?
データベーステーブルの1つに10列(pile_1からpile_10)があるRubyonRailsアプリを開発しています。モデル内のこれらの列に10要素の配列としてアクセスすると便利です。
composed_of
自分のやりたいことを強要できるはずなのに、どうしたらいいのかわからない。誰かが私を啓発したり、より良い戦術を提案したりできますか?
だろう
def piles
(1..10).map{ |num| self[ "pile_#{ num }"]}
end
十分ではありませんか?
スキーマを変更する権限があるので、変更する必要があります。配列を個別の列としてテーブルに格納することは非正規化されます。スキーマが正規化されているかどうかは重要ではないかもしれませんが、現在の問題は非正規化されたスキーマの直接の結果です。
あなたがすべきことは、そのように新しいテーブル、山を作成することです。私が知っているのは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