質問: [] if !Model.title1.present? @titles.push(Model.title1) をtitle1-5まで繰り返した上でeachメソッドで取り出すというくらいしか出てきませんでした。 ``` <%= @titles.each do |title| %> title <% end %> ``` この場合他の何らかのメソッドを使う、もしくはカラムの作成方法を工夫することで、配列の作成を簡潔に行う事のできる方法はないでしょうか。 また、最終目標は短いコードで、複数個分のHTMLコードをまとめて作成することなので、 eachを使わずともこれが達成できる方法があれば教えていただきたいです。 知識が浅いため、質問の意図が伝わりにくいと思いますが、回答いただけますと幸いです。
回答: 単純には ``` @titles = (1..5).map {|i| model.read_attribute("title#{i}")}.compact # またはmodel["title#{i}"] ``` とでもなるでしょうか ただし、`titleなんとか`メソッドを上書きしているときは使えません。 そもそも、`title1` `title2`... など同じ種類のカラムを定義するのは「列持ち」といってアンチパターンとされています。`title`を別テーブルとして、元のテーブルからhas_manyリレーションを張る形で実装するか、act-as-taggable-onというタグをサポートするgemを利用することを検討した方が良いと思います。