我想找到next_review
在当前时间Time.zone.now
之前的所有卡(属于用户)。
以下是我的模式,
期待行为
我应该将finder方法保留在相应的模型中,
class User < ActiveRecord::Base
has_many :cards
def next_cards
cards.next_cards
end
end
class Card < ActiveRecord::Base
has_one :meta
def next_cards
# what should I write here?
end
end
class Meta < ActiveRecord::Base
belongs_to :card
# what should I write here?
end
我在想什么
meta
模型中并获取所有目标元card
模型user
型号答案 0 :(得分:1)
user.cards.joins(:meta).where('metas.next_review_date <= ?', Time.zone.now)
<强> 更新 强>
class User < ActiveRecord::Base
has_many :cards
def next_cards
cards.next
end
end
class Card < ActiveRecord::Base
has_one :meta
scope :next, -> { joins(:meta).merge(Meta.next) }
end
class Meta < ActiveRecord::Base
belongs_to :card
scope :next, -> { where('next_review_date <= ? ', Time.zone.now) }
end
然后
user.next_cards
只会退回属于用户的卡片,并且会返回带有review_date&lt; = now
的元素的卡片这将只执行1个查询,而不是您在帖子中建议的2-3个查询。