了解rails委托方法

Bit*_*ise 1 ruby ruby-on-rails

我正在尝试了解Rails开箱即用的委托方法.这就是我想要做的.所以,我有Accounts那么多Tasks.所以我试图让帐户的任务计数,这是我目前正在做的事情:

def total_tasks
  tasks.count
end
Run Code Online (Sandbox Code Playgroud)

很标准的东西.但我正在尝试将此方法移动到委托方法.我试过这个,但它不起作用

 delegate :count, to: :task, prefix: "total"
Run Code Online (Sandbox Code Playgroud)

这没用,我真的没想到会这样.有没有办法可以做到这一点?

max*_*max 5

delegate :count, to: :tasks, prefix: "total"
Run Code Online (Sandbox Code Playgroud)

这只是创建方法的元编程:

def total_count
  tasks.send(:count)
end
Run Code Online (Sandbox Code Playgroud)

虽然因为你应该使用size而不是count因为后者总是会导致数据库查询,即使关联已被急切加载,这也不适合委托.

def tasks_total
  tasks.size # prevents n+1 query issue.
end
Run Code Online (Sandbox Code Playgroud)

为什么你想为此创建一个方法超出了我的想法,因为它实际上是另一个要输入的字符.