2012-01-13 20 views
0

私はRailsアプリケーションの2つのモデル、ユーザーと呼び出しを持っています。次のように モデルの関連付けが設定されています。Rails 3.1の関連付けとカウント?

ユーザモデル

has_many :calls 

コールモデル

belongs_to :user 

私はapplication.html.erbレイアウト内、呼び出ししようとしています、現在のユーザが持っているコールの数。

<%= Call.count %> 

動作しますが、それは明らかにすべての呼び出しではなく、現在のユーザーが持っているだけで通話を数えています:

現在、私は次の文字列を使用しています。

だから私は、次のためにすることをスワップ:

<%= current_user.Call.calls.count %> 

私はこれを行う方法のように混乱しています。私はどこからでもカウントを呼び出すことができるようにする必要があるので、最後の30日などに基づいてカウントを開始することができます。

+0

はまた、コールがRubyのメソッドである「コール」以来、モデルのための潜在的に悪い名前であることに注意してください。 – tee

答えて

0

ビュー内にデータベースコールを入れたくない場合は、それをコントローラに入れます。 User.find(current_user.id).calls.countのようなものを探しています。設定した関連付けを使用するか、またはモデル関係を無視したい場合は、Call.where(:user_id => current_user.id).count

を入力してください正しい行動で)、同様に視野に入る。

コントローラ

@count = Call.where(:user_id => current_user.id).count

ビュー

<%= @count %>

+0

私はこれを私の呼び出しモデル 'def callcount Call.where(:user_id => current_user.id).count end'に追加し、' <%= Call.callcount%> 'で表示しました。働いていない - 私は何が欠けている? – dannymcc

+0

詳細を含む私の答えを更新しました – Elliot

1

この操作を行います。あなたはすべてのユーザーオブジェクトと同じことを行うことができます

current_user.calls.count 

を:

user = User.find(1) 
user.calls.count 

その後、日付ベースのカウントを行うためのチェーン以上の条件ができます。

user.calls.where("calls.created_at > ?", 30.days.ago).count 
関連する問題