使用从" date"提取的年份开始的Rails关联列作为外键?

时间:2016-05-27 05:22:19

标签: ruby-on-rails ruby

我有两种模式:

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计算记录。

2 个答案:

答案 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模型。