我有一个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)
这种关系通常如何解决?