我仍然是Rails的新手(实际上是开发期)。我正在使用Rails 3。
活动包含以下字段:id,user_id,activity_type(integer)。
在我看来,我想显示用户已完成的每种活动类型的计数,如下所示:
<%= activity.activity_type %> - [count for activity]
只有,我可以弄明白该怎么做。在我的控制器中,我尝试了不同的东西,如:
@user = current_user
@activity_type_ids = Activity.select("DISTINCT(activity_type_id)")
@activity_type_counts = Activity.where('user_id = ? and activity_type_id = ?', @user.id, @activity_type_ids).count
或
@activity_type_counts = Activity.where('user_id = ? and activity_type_id = ?', @user.id, @activity_type_ids).group("activity_type_id").count
在我看来,我试过了:
<% @activity_type_counts.each do |activity_type_count| %>
<%= "(#{activity_type_count.activity_type_id}) #{activity_type_count}" %>
<% end %>
和
<% @activity_type_ids.each do |activity_type_id| %>
<%= "(#{activity_type_id.activity_type_id}) #{@activity_type_count}" %>
<% end %>
提前感谢您提供任何帮助!
使用模型和控制器进行了更新 修复模型细节
我有三种模式:用户,位置和活动。用户有许多位置。一个地方可以有很多活动。
user.rb
has_many :locations
location.rb
belongs_to :user
has_many :activities
activities.rb
belongs_to :location
activity_report_controller
@user = current_user
@locations = @user.locations
@activities = @locations.activities.count(:group => "activity_type_id")
答案 0 :(得分:1)
我认为你有
class User
has_many :activities
end
然后你可以说
@user.activities.count(:group => "activity_type_id")
这应返回OrderedHash
,其中键为id
,值为计数。
<小时/> 更新:事实证明原来的问题是错误的,有一个中介
Location
你想要的是有很多用户参与活动
class User
has_many :locations
has_many :activities, :through => :locations
end
class Location
has_many :activities
end
现在在您的控制器中。
@user = current_user
@activity_counts = @user.activities.count(:group => "activity_type_id")