私は次のようなモデルを持っています
class Employee < ActiveRecord::Base
belongs_to :branch, :foreign_key => :branch_code, :primary_key => :branch_code,
:conditions => proc{["? BETWEEN enabled_day AND expiration_day", Date.current]}
end
class Branch < ActiveRecord::Base
has_many :employees, :foreign_key => :branch_code, :primary_key => :branch_code
scope :valid, lambda {where(["? BETWEEN enabled_day AND expiration_day", Date.current])}
end
従業員は支店に属していますが (シンプル)、支店には同じ branch_code のレコードが複数あり、「現時点で有効」なレコードを常に使用する必要があります。
(ご想像のとおり、プロジェクトは古いアプリの移植であり、古いスキーマを継承しています)
今では機能しますが、まったく同じ where 条件を 2 回記述する必要があります (実際には、ブランチはより多くのテーブルに関連付けられているため、5 回または 6 回)。
Branch のスコープを関連付けの条件として使用したり、DRY する他の方法を使用したりできないだろうか?