2012-01-13 3 views
0

У меня две модели в приложении Rails, пользователи и звонки. модельные ассоциации устанавливаются следующим образом:Rails 3.1 ассоциации и счет?

модель пользователя

has_many :calls 

модель вызова

belongs_to :user 

Я пытаюсь позвонить, в макете application.html.erb, количество вызовов, которое имеет текущий пользователь.

В настоящее время я использую следующую строку:

<%= Call.count %> 

который работает, но это, очевидно, считая все вызовов, а не только звонки, что текущий пользователь имеет.

Так я сменил, что в следующем:

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

Я запутался, как это сделать. Мне нужно уметь подсчитывать счет из любого места, чтобы я мог начать работу с подсчетом на основе последних 30 дней и т. Д.

+0

отметить также, что вызов является потенциально плохим именем для модели, так как «вызов» является методом рубина. – 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