我有一個Camping
,它有一個Author
。一個Author
有很多Campings
。從相關對象中獲取頂級x項目
入門的「前5名」,定義爲「最後5個野營」與做:
@author.campings.order(:created_at).limit(5)
,但我想這個概念,如果「前5名」被移動到了野營模型,對我來說似乎更清潔;畢竟,Camping
是唯一知道top
是什麼的人。
喜歡的東西
@author.campings.top
但如何定義這個上Camping
? @author.campings
不是Camping
,而是ActiveRecord::Relation
。因此,像在模型以下/ camping.rb不起作用:
# Scope for "top" campings
def top(amount)
self.order("created_at").limit(amount)
end
用作
@author.top(5)
現在,我只需要這個「頂」事情的經過的關係,@author
以上提到的例子。目前,「頂部」的定義僅僅是「最後5個露營」,但在下一次迭代中,根據視圖,評分或其他參數以及Camping
上的字段的數量,這將更加複雜。這導致我相信Camping
是定義「top」的正確位置,而不是Author
。
我可以將其添加到Author
,但我的知識水平有限,感覺像是違反了隔離模式;作者突然需要知道的關於野營的領域:
# Last 5 campings for this author
def top_campings(amount)
campings.order("created_at").limit(amount)
end
用作
@author.top_campings(5)
如何這種關係通常解決了嗎?
我認爲你最後一個例子是罰款。它沒有違反任何規定,只是做它應該做的事情。 – MurifoX
我給這個例子命名錯了。對困惑感到抱歉。最新的編輯修復了這一點。我想更清楚地指出,@ author.top_campings將有關「露營」的知識拉入「作者」。我現在澄清說。 – berkes