我有一个Camping
哪个有一个Author
。安Author
有很多Campings
。
获得定义为“最后 5 次露营”的“前 5 名”是通过以下方式完成的:
@author.campings.order(:created_at).limit(5)
但是如果将“前 5 名”移到 Camping 模型中,我希望这个概念,这对我来说似乎更干净;毕竟,Camping
唯一知道是什么top
的人。
就像是
@author.campings.top
但是如何定义这个Camping
?@author.campings
不是一个Camping
,而是一个ActiveRecord::Relation
。因此,models/camping.rb中的以下内容不起作用:
# Scope for "top" campings
def top(amount)
self.order("created_at").limit(amount)
end
用作
@author.top(5)
目前,@author
在上述示例中,我只需要通过关系来实现这个“顶级”事物。目前,“顶部”的定义只是“最近 5 次露营”,但在下一次迭代中,这将根据观看次数、评分或其他参数和字段的数量而变得更加复杂Camping
。这让我相信这Camping
是定义“顶部”的正确位置,而不是Author
.
我可以将其添加到 中Author
,但以我有限的知识,感觉就像违反了隔离模式;作者突然需要了解 Camping 上的字段:
# Last 5 campings for this author
def top_campings(amount)
campings.order("created_at").limit(amount)
end
用作
@author.top_campings(5)
这种关系通常如何解决?