循环通过某些模型列

时间:2016-06-14 20:30:31

标签: ruby-on-rails

我有一个包含一堆布尔列的帖子模型,我想循环遍历而不是手动检查每个列。但是,我不想遍历模型中的每一列 - 只是一个特定的集合。

我找到了一个循环遍历模型所有列的解决方案:

user.columns.each do |column|

但我怎么能只指定某些列?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用.find_all等方法过滤,例如按名称:

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