繁体   English   中英

如何编写活动记录查询以选择列中的某些值

[英]how to write active record query for selecting certain values in a column

我有一个以年龄为属性的狗桌。 年龄在1年-12岁之间的狗在一个栏中,而1岁以下的狗在不同的栏中。 我想成为亚伯来选择年龄在8至12岁之间的狗,并对它们进行计数。 这是我的查询,但只选择了某个年龄的狗。

@checkup = Dog.where(age: 8).count

根据Pavan的建议,您可以使用范围来创建BETWEEN查询。

@checkup = Dog.where(age: 8..12).count

但是这种方法仍然存在缺陷,因为您必须随着时间的流逝定期更新所有记录!

而是使用“ Date列来记录狗的生日。

rails g migration AddBirthdateToDogs birthdate:date
rake db:migrate

然后,您可以通过以下方式选择狗:

Dog.where(birthdate: 8.years.ago..12.years.ago

或者,如果您想花哨的话,可以创建一个类方法:

class Dog < ActiveRecord::Base
  # Select dogs by age
  # @param [Range, Fixnum] age
  # @return [ActiveRecord::Relation]
  # @example
  #   Dog.aged(0)
  #   Dog.aged(1..2) 
  def self.aged(age)
    if age.respond_to?(:map)
      age = age.map do |x|
        x.is_a?(Date)? x : x.years.ago  
      end 
      age = age.first..(age.last + 1.year)
    elsif age.respond_to?(:year)
      age = age.year.ago..(age + 1.year)
    end
    self.where(birthdate: ago)
  end
end

如果我理解正确,则下面的方法应该有效

@checkup = Dog.where(age: 8..12).count

返回8-12之间的狗的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM