2016-06-14 7 views
0

それぞれを手動でチェックするのではなく、ループしたいブール型列の束を持つポストモデルがあります。しかし、モデルのすべての列(特定のセット)をループしたくない。特定のモデル列をループする

私は、モデルのすべての列をループの解決策が見つかりました:

user.columns.each do |column| 

をしかし、どのように、私は特定の列のみを指定することができますか?

答えて

0

あなたは名前で、たとえば、フィルタリングする.find_allのようなメソッドを使用することができます。

User.columns.find_all { |column| ['name', 'created_at'].include? column.name }.each do |column| 
1

をサンプルクラスに、あなたがた方法を見てみましょう:

> Post.columns.last 
=> #<ActiveRecord::ConnectionAdapters::PostgreSQLColumn:0x007feee6bc2320 
@array=false, 
@cast_type= 
    #<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x007feee6bd36c0 
    @limit=nil, 
    @precision=nil, 
    @range=-2147483648...2147483648, 
    @scale=nil>, 
@default="1", 
@default_function=nil, 
@name="max_likes", 
@null=false, 
@sql_type="integer"> 

だが言ってみましょう12の投稿です。

> Post.count 
=> 12 

columns上の値のすべてがアクセス可能であり、その結果を制限するために使用することができます。

> Post.columns.count { |c| c.name == 'max_likes' } 
=> 1 
> Post.columns.count { |c| c.sql_type == 'integer' } 
=> 5 
> Post.columns.count { |c| c.precision == nil } 
=> 12 
> Post.columns.count { |c| c.default == "1" } 
=> 2 

あなたはフィルタリングしたら、あなたが選択した列で必要なものは何でも行うことができます。

> Post.columns.select { |c| c.name == 'max_likes' }.each do |c| 
    puts c.sql_type 
    end 
=> integer 
関連する問題