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