Rails与外键之间的关系?

时间:2013-07-27 14:08:36

标签: ruby-on-rails activemodel

我的Rails应用程序中有两个实体,我正在尝试建立关系 - 检查和数月。 Month of Instances将有一个start_date和一个end_date - 这些日期与日历月并不完全一致。支票实例将有deposit_date。我想以某种方式描述一个月份有很多支票的关系,其中存款日期在月份的开始和结束日期之间。这可能吗?

2 个答案:

答案 0 :(得分:1)

这是可能的。您可以自定义relation参考。

class Month < ActiveRecord::Base
  has_many :checks, ->(month) { where deposited_at: (month.start_at)..(month.end_at) }, class_name: 'Check'
end

除非您更改关系名称,否则实际上不需要指定class_name。例如,如果您使用current_checks而不是简单地命名checks

答案 1 :(得分:0)

我最后做的是从Month类中删除has_many:check并定义我自己的方法:

class Month < ActiveRecord::Base
  # other associations and validations omitted

  def checks
    Check.where(deposit_date: self.start_date..self.end_date)
  end
end

我不知道这是否会被视为黑客,但它给了我所需要的东西。当然,我愿意看到更多'Rails方式'来做到这一点。