2017-09-12 120 views
1

我在尝试了解Rails开箱即用的委托方法。这是我想要做的。所以,我有Accounts that_many Tasks。所以我试图得到帐户的任务计数,这里是我目前如何做:理解rails委托方法

def total_tasks 
    tasks.count 
end 

很标准的事情。但我试图将此方法移至委托方法。我试过这个,但它不起作用

delegate :count, to: :task, prefix: "total" 

这并没有工作,我真的没有想到它会这样做。有什么办法可以做到这一点?

+0

我认为你的第一个解决方案比代表团更好,因为它增加了可读性。 “Accounts#total_tasks'比'Accounts#total_count'(委托方法)更有意义,因为我不确定我在计算什么。另外我同意@max'size'是比'count'更好的选择,以避免不必要的数据库访问 – engineersmnky

回答

5
delegate :count, to: :tasks, prefix: "total" 

这是创建一个方法只是元编程:虽然

def total_count 
    tasks.send(:count) 
end 

这是不是一个真正的好适合代表你应该使用size代替count,因为后者总是会导致一个DB即使关联已经被加载,查询也是如此。

def tasks_total 
    tasks.size # prevents n+1 query issue. 
end 

为什么你想为此创建一个方法超出了我,尽管它实际上是一个多字符类型。

+1

从技术上讲,它会是'total_count'并带有下划线,但我同意你的完整情绪 – engineersmnky