【问题标题】:Creating a "feed" from multiple rails models, efficiently?有效地从多个导轨模型创建“提要”?
【发布时间】:2011-10-20 20:01:54
【问题描述】:

这是对Creating "feeds" from multiple, different Rails models 的跟进。在这个问题中,tadman 建议使用这种方法从三个模型(Ticket、Post、Report)中创建最近项目的用户提要:

 @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]

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

我真的很想了解更多关于这个替代解决方案的信息,它看起来更高效、更优雅。谁能告诉我如何做到这一点?让我们使用上一个问题的相同背景信息作为基础。

【问题讨论】:

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


    【解决方案1】:

    我曾经做过的是,拥有一个单独的模型 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 has_many :article; has_many :user, has_many :status 等等,然后:include 提要中的所有这些资源,并在视图中呈现它们。希望这是有道理的;-)

    【讨论】:

    • 关于如何将其放入控制器并将其呈现在视图中的任何想法?不确定您所说的“然后:在提要中包含所有这些资源”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多