2017-09-12 1 views
1

Railsがすぐに提供するデリゲートメソッドについて学習しようとしています。ここに私がやろうとしていることがあります。だから、私はAccounts have_many Tasksを持っています。だから私は、アカウントのタスク数を取得しようと、ここで私は現在、それをやっている方法ですよ:Railsデリゲートメソッドの理解

def total_tasks 
    tasks.count 
end 

かなり標準のものを。しかし、私はこのメソッドをデリゲートメソッドに移そうとしています。私はこれを試しましたが、うまくいきません。

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

これはうまくいかず、私は本当にそれが期待できませんでした。私はこれを行う方法がありますか?

+0

あなたの最初の解決策は、読みやすくするために委任先よりはるかに優れていると思います。 'Accounts#total_tasks'は' Accounts#total_count'(デリゲーションメソッド)よりもはるかに理にかかります。ここで私は何を数えているのか分かりません。さらに、@max 'size'は、不必要なDBヒットを避けるために' count'よりもはるかに優れたメソッドの選択であることに同意します – engineersmnky

答えて

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

これは、メソッドを作成するだけでメタプログラミングである:後者は常にDBの原因として、あなたはsize代わりのcountを使用しなければならないので、これはしかし、本当にデリゲートに適していないです

def total_count 
    tasks.send(:count) 
end 

関連が熱心に読み込まれた場合でもクエリを実行できます。

なぜこの方法を作成したいのですが、実際にはもう1文字入力するだけです。

+1

技術的には 'total_count'がアンダースコアで表示されますが、 – engineersmnky

関連する問題