我有一个包含一堆布尔列的帖子模型,我想循环遍历而不是手动检查每个列。但是,我不想遍历模型中的每一列 - 只是一个特定的集合。
我找到了一个循环遍历模型所有列的解决方案:
user.columns.each do |column|
但我怎么能只指定某些列?
答案 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|