从多个轨道模型中有效地创建“馈送”?

时间:2011-10-20 20:01:54

标签: mysql ruby-on-rails ruby-on-rails-3

这是Creating "feeds" from multiple, different Rails models的后续行动。在这个问题中,tadman建议使用这种方法从三个模型(票证,帖子,报告)创建最近项目的用户提要:

 @items = [ Ticket, Post, Report ].inject([ ]) do |a, with_class|
   a + with_class.find(:all, :limit => 10, :order => 'created_at DESC')
 end.sort_by(&:created_at).reverse[0, 10]

他认为这是一种有效的方法,但这不一定是最有效的方法。他建议,除了另一种方法之外,“创建一个与各种记录有多态关联的索引表。”

我真的很想学习更多有关这种替代解决方案的信息,它看起来更高效,更优雅。谁能告诉我怎么会这样做?让我们使用上一个问题中相同的背景信息作为基础。

1 个答案:

答案 0 :(得分:7)

我曾经做过的,有一个单独的模型Feed(feeds_controller)并在after_save回调中将其更新到所有interesting模型。因此,例如,如果您有一个模型文章,请使用after_save回调:

def after_save
  feed = Feed.new
  feed[:model_name] = 'Article'
  feed[:item_id] = id
  feed.save
end

然后,您可以像任何其他模型一样线性访问Feed。保存Feed时会产生计算费用,而不是从Feed中读取。

哦,您还可以拥有Feed has_many :article; has_many :user, has_many :status等等,然后:include Feed中的所有资源,并在视图中呈现它们。希望这是有道理的; - )