Web + Life Hack

〜True But Useless〜

【rails】【ruby】ActiveRecordでcount(*)の結果をsortして上位をリストアップする方法をいけてないコードで書いてみた!



なかなかやったことがなかったので備忘録がてらにメモ。
(あまり良いコードではないのは重々承知なので、やり方として覚えるという意味で。。。)


やりたかった事としては

ActiveRecordでcount(*)の結果をsortして上位をリストアップ



です。
今回は、今月中で自分が所属している部署内の最もtweetしている上位3名を
view側に表示しています。


model側

scope :tweet_rankings, ->(office_id, date=Date.today){
  select("users.*, count(post_tweets.get_user_id) AS ranking_count") 
  .joins(:post_tweets)
  .where('users.office_id=?',office_id)
  .where('post_tweets.created_at BETWEEN ? AND ?',date.beginning_of_month,date.end_of_month.next.to_date)
  .group('post_tweets.users.id')
  .order("ranking_count DESC") .limit(3) 
}


contorller側

@month_all_ranking_users = User.tweet_rankings(current_user.office_id)


view側

<% @month_all_ranking_users.each_with_index do |user,i| %> 
<div class="<%= i+1%>" > 
<%= link_to image_tag(user.avatar_off_url , :alt => "" ,:width => 70,:height => 70)%> 
</div>
<%end%>



最近、コードを書き直されることが多いからもっと上手く書けるようになりたいなー。。。

個人的な写真:

リブセンスさんの勉強会に参加してきました!
http://instagram.com/p/kmk2tlQYtI/