[英]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.