【发布时间】:2014-01-14 21:46:08
【问题描述】:
我有 3 个模型,UserActivity、User 和 UserPhoto。
User
has_many :user_photos, dependent: :destroy
has_one :user_activity, dependent: :destroy
has_one :subscription, dependent: :destroy
UserActivity
belongs_to :user
delegate :user_photos, to: :user
UserPhoto
belongs_to :user
我想获取所有“活跃”并订阅的用户,并在他们最后一次参与“用户活动”之前对其进行排序,并根据他们拥有的照片数量对他们进行排序。
目前,我有:
UserActivity.where(gender: "M")
.joins(:user)
.where("users.activation_state = 'active'")
.order('user_activities.updated_at DESC')
.includes([:user, user: [ :subscription ]])
这将返回按上次活动更新排序的所有活动用户。
我尝试添加查询片段,例如“.joins(:user_photo).order('user.user_photos.length DESC')”,这会导致上述内容阻塞。谁能指出我正确的方向?
编辑/更新:我按照以下用户的建议使用了计数器缓存并最终得到:
UserActivity.where(gender: "M") .joins(:user) .where("users.activation_state = '活动'") .order('user_activities.updated_at DESC') .includes([:user, user: [ :subscription ]]).order('user_photos_count DESC')
【问题讨论】:
标签: sql ruby-on-rails activerecord