35981


Ruby on railsで投稿サイトのようなものを作成しているのですが、  
その中で、モデル内に同じ種類のカラム（同じ型・名前）を複数個作成する必要があります。

現在は[title1],[title2]のように種類+nでカラム名をつけているのですが、  
これを短いコードで配列に入れることができないでしょうか。

目的としては、例えばtitle1-title5までのカラムが存在するとして、存在するレコードのみ、htmlをまとめて出力させることです。

[code]

    <ul>
     <li>title1</li>
     <li>title2</li>
     <li>title3</li>
    </ul>
    
[/code]

私の知識では、Model.title1, Model.title2と一々手打ちで指定する方法しか思い浮かんでいないので、  
その場合配列を作成し、そこに  
@titles = []  
if !Model.title1.present?  
@titles.push(Model.title1)  
をtitle1-5まで繰り返した上でeachメソッドで取り出すというくらいしか出てきませんでした。

[code]

    <ul>
    　<%= @titles.each do |title| %>
    　　<li><p>title</p></li>
    　<% end %>
    </ul>
    
[/code]

この場合他の何らかのメソッドを使う、もしくはカラムの作成方法を工夫することで、配列の作成を簡潔に行う事のできる方法はないでしょうか。

また、最終目標は短いコードで、複数個分のHTMLコードをまとめて作成することなので、  
eachを使わずともこれが達成できる方法があれば教えていただきたいです。

知識が浅いため、質問の意図が伝わりにくいと思いますが、回答いただけますと幸いです。


CC BY-SA 3.0
2017-06-29T13:52:05.290
35976
2017-07-03T04:06:20.757
24109
question
ruby-on-rails
Railsで同種類・複数個のカラムを抽出する方法について


単純には

[code]

    @titles = (1..5).map {|i| model.read_attribute("title#{i}")}.compact
    # またはmodel["title#{i}"]
    
[/code]

とでもなるでしょうか

ただし、`titleなんとか`メソッドを上書きしているときは使えません。

そもそも、`title1` `title2`...
など同じ種類のカラムを定義するのは「列持ち」といってアンチパターンとされています。`title`を別テーブルとして、元のテーブルからhas_manyリレーションを張る形で実装するか、act-
as-taggable-onというタグをサポートするgemを利用することを検討した方が良いと思います。


CC BY-SA 3.0
2017-06-30T00:34:18.550
35981
2017-07-03T04:06:20.757
2017-07-03T04:06:20.757
5793
5793
35976
answer