rails 初学者のアウトプット用投稿です。同じ結果を得られるより良い書き方がございましたらコメントでご教示頂けると幸いです。
#実現したいこと
学習アプリ作成においてユーザーの個人ページ(user_controllerのshowアクション)に一週間、どのくらい学習を行なったのかをhtmlのprogressタグで見える化する。
今回はanswerモデルにそれぞれの学習内容が保存されており、answerの作成数をカウントし、それを学習量の算出基準とする。
#実装の流れ
①userに紐づいたanswerモデルから一週間分のデータを配列として取り出す。
②①で取り出したデータからさらに曜日だけを配列として取り出す。
③show.html.erb内のprogressタグ、value属性の値に②の配列の数を代入する。
#実際のコード
def show
@wdays = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
@contributions = @user.answers.where(created_at: Time.current.all_week)
@contributions = @contributions.map{|days| days.created_at.strftime('%a')}
end
@wdaysに曜日を配列として保存。
where(created_at: Time.current.all_week)で一週間以内の日にちが含まれるcreated_atを有するデータを検索できる。
created_at.strftime('%a')で曜日だけを取り出せる。
<% @wdays.each do |day| %>
<section>
<span><%= day %></span><progress value=<%="#{@contributions.count{|i| i == day}}" %> max="30"></progress>
<span><%="#{@contributions.count{|i| i == day}}" %></span></section>
<% end %>
progressタグのvalue属性にanswerの数分の曜日が収容されている@contributionsを埋め込み、それぞれの曜日に保存されたanswerの数をcount{|i| i == day}で取得し、表示する。