それぞれを手動でチェックするのではなく、ループしたいブール型列の束を持つポストモデルがあります。しかし、モデルのすべての列(特定のセット)をループしたくない。特定のモデル列をループする
私は、モデルのすべての列をループの解決策が見つかりました:
user.columns.each do |column|
をしかし、どのように、私は特定の列のみを指定することができますか?
それぞれを手動でチェックするのではなく、ループしたいブール型列の束を持つポストモデルがあります。しかし、モデルのすべての列(特定のセット)をループしたくない。特定のモデル列をループする
私は、モデルのすべての列をループの解決策が見つかりました:
user.columns.each do |column|
をしかし、どのように、私は特定の列のみを指定することができますか?
あなたは名前で、たとえば、フィルタリングする.find_all
のようなメソッドを使用することができます。
User.columns.find_all { |column| ['name', 'created_at'].include? column.name }.each do |column|
をサンプルクラスに、あなたがた方法を見てみましょう:
> 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