我有两种模式:
class Person < ActiveRecord::Base
# birthday: date
end
class BirthYear < ActiveRecord::Base
# year: int
# people_count: int
end
有没有办法在BirthYear中的year
和Person中的date
之间创建关联?我的目标是跟踪某一年内出生的people
人数,并跟踪该数字何时发生变化。
我基本上希望将date
用作SQL条件的主键:
extract(year from people.birthday) = birth_year.year
编辑:注意我想尽可能使用counter_cache,这就是为什么我在考虑使用单独的模型。我希望每次使用计数值时都避免使用extract
计算记录。
答案 0 :(得分:1)
不确定BirthYear
如您所述,它需要单独的模型。
这个怎么样?
class Person < ActiveRecord::Base
# birthday: date
def self.born_in_year_count(year)
self.where('extract(year from birthday) = ?', year).count
end
def birth_year
birthday.year
end
end
Person.born_in_year_count(1990)
答案 1 :(得分:0)
如果您需要跟踪特定年份出生人数的变化,请尝试对before_create
模型实施Person
回调(可能您需要添加after_destroy
回调以跟踪用户删除):
class Person < ActiveRecord::Base
# birthday: date
before_create :do_some_stuff
# ...
private
def do_some_stuff
# ...
end
end
似乎只存在用于索引的BirthYear
模型。