Rails - 如何通过user_id查询5个不同表中的记录

时间:2012-10-09 05:58:24

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

我有模型UserVoteCommentEdit等,所有模型都有user_id属性。我正在尝试创建一种最近活动的时间轴,这让我分别查询所有5个模型并按日期时间排序。但是,对于具有大量活动的帐户,这5个查询需要很长时间才能执行。我想找到一种优化性能的方法,我认为组合5个查询可能会有效。

我无法提出任何有效的查询来实现我想要的目标。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为评论中最好的建议来自Steve Jorgensen,“我通常通过在活动日志中添加记录,然后查询它来完成此操作。”。

如果您想将这个想法提升到新的水平,请查看sphinx(专为索引数据库内容而设计的搜索引擎)。您可以使用thinkphinx - http://freelancing-god.github.com/ts/en/轻松地与rails集成。

此外,正如蒂姆·彼得斯提出的那样,无论你如何解决这个问题,你都应该在所有的fkeys上都有索引 - http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index

答案 1 :(得分:1)

我认为对这个问题使用多态关联是个好主意 - http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

class TimeLine < ActiveRecord::Base
  belongs_to :timelineable, :polymorphic => true
end

class UserVote < ActiveRecord::Base
  has_many :time_lines, :as => :timelineable
end

class Comments < ActiveRecord::Base
  has_many :time_lines, :as => :timelineable
end

现在您可以对time_line进行排序并访问相关资源。