减少对唯一注释的查询次数

时间:2013-11-29 10:39:36

标签: ruby-on-rails ruby activerecord join

我有一个简单的事件应用程序,人们可以评论,我有能力获得单个用户评论的事件。这将是独一无二的。

我正在寻找一种方法,我可以把它放到一个Scope中,或者只是写得更好。任何提示都会非常感激,因为它现在运行一个新的查询显然是为Event.find

下面的代码是我上周写的一些代码的混搭,然后找到了一些替代方法,但我认为这可以改进,比如events = [] - 肯定可以在你追加时分配事件。

def commented_on
    events = []
    self.comments.each do |c|
        p c
        events << Event.find(c.event_id)
    end

    # Return only unique Events
    p events.uniq
  end

2 个答案:

答案 0 :(得分:2)

你应该从事件模型转到这里。 这样的事情应该有效:

Event.join(:comments => :user).where("users.id" => self.id).uniq

答案 1 :(得分:1)

events = Event.where(id: comments.map(&:event_id))