has_many 宣言の多くを拡張して、関連付けをフィルター/結合/プリロードしました。has_many :through リレーションシップを宣言するときに、これらの拡張機能のいくつかを再利用したいと思います。これは可能ですか?別のアプローチをとるべきですか?
例:
ライブラリモデルにこれがあります:
class Library < ActiveRecord::Base
has_many :meals, :dependent => :destroy do
def enabled
where(:enabled => true)
end
end
end
私の食事モデルにはこれがあります:
class Meal < ActiveRecord::Base
has_many :servings, :inverse_of => :meal, :dependent => :destroy
end
ライブラリに多くのサービングがあることを望みますが、有効な食事からのみです。これを行うにはいくつかの方法があります。
# repeat the condition in the has_many :servings declaration
class Library < ActiveRecord::Base
has_many :servings, :through => :meals, :conditions => ["meals.enabled = ?", true]
end
# declare a different meals association for only the enabled meals
class Library < ActiveRecord::Base
has_many :enabled_meals, :class_name => "Meals", :conditions => [:enabled => true]
has_many :servings, :through => :enabled_meals
end
既存の :meals 宣言の拡張子を再利用する方法はありますか? (def は最初のコード ブロックで有効になっています)