2013-09-26 46 views
2

基本上,我想採用一組典型的ActiveRecord關係,並使它看起來像一個簡單的關係。如何將ActiveRecord關係混亂映射到單個ActiveRecord :: Relation對象中

假設我有典型的Post,Comment,User其中帖子有許多評論和評論有用戶。

現在,假設我想將以下數據導入到視圖中。 (假設所有需要的數據都可以通過一個Arel語句讀取)。

post.title 
post.tag.name 
post.comments.last 
post.comments.last.user.full_name 

我想通過通過以下方法稱爲PostSummary新的對象,只是訪問它們:

post_summary.title 
post_summary.tag_name 
post_summary.last_comment 
post_summary.last_comment_user 

到目前爲止,不太靠譜。它可以通過一個OpenStruct和一些映射來完成,但我想PostSummary是一個只讀的ActiveRecord :: Relation對象,可以讓你做到以下幾點:

PostSummary.first.attributes #=> [title, tag_name, last_comment, last_comment_user] 
PostSummary.count #=> 42 
... 

我敢肯定,這是可能的很多工作,但是有沒有東西已經設置來做到這一點?

+0

你認爲'PostSummary.count'是什麼?郵寄記錄? – lmars

+0

在這種情況下,是的。 –

回答

2

似乎有點凌亂,做你的建議。我建議將這些方法放在裝飾器中。裝飾器通常用於保存與視圖相關的信息和方法,以避免模型膨脹。

對於一個好的裝飾庫,請參閱Draper

+0

我在Draper周圍挖了一下,但乍一看,它看起來正是我想要的。 –