ruby(ruby on rails)で家計簿システムを作っています。
各ページ毎(固定費ページ、変動費ページ、収入ページ)の各月毎に各項目(電気代や水道代)のグラフを実装中なのですが、それぞれ固定費の項目、変動費の項目、収入の「項目のデータを絞って、グラフにすることができません。
現状の画像(id等グラフにする必要のないものまで、拾ってしまいます。)
controller
class UsersController < ApplicationController before_action :set_user, only: [:show, :show_1, :show_2, :edit, :update, :destroy, :edit_basic_info, :update_basic_info] before_action :logged_in_user, only: [:index, :edit, :update, :destroy, :edit_basic_info, :update_basic_info] before_action :correct_user, only: [:edit, :update] before_action :admin_user, only: [:destroy, :edit_basic_info, :update_basic_info] before_action :set_one_month, only: [:show, :show_1, :show_2] def index @users = User.paginate(page: params[:page]).search(params[:search]) end # 固定費画面 def show if params["select_year(1i)"].present? && params["select_month(2i)"].present? #&& params["select_month(3i)"].present? # パラメーターで2020(1i)-06(2i)-01(3i)というスタイルで表示されていたので、コードもそれに合わせてやる。 select_day = params["select_year(1i)"] + "-" + # パラメーター上では、月日は「6」や「1」というふうに出ていたので上記のスタイルに合わせて比較させるので以下のよいうにフォーマットを合わせている。 format("%02d", params["select_month(2i)"]) + "-" + format("%02d", params["select_month(3i)"]) # @first_day = select_day.to_date.beginning_of_month # @last_day = @first_day.end_of_month # @household_account_books = @user.household_account_books.where(worked_on: @first_day..@last_day).order(:worked_on) params[:date] = select_day.to_date.beginning_of_month set_one_month end @household_account_book = @user.household_account_books.find_by(worked_on: @first_day) end # 変動費画面 def show_1 if params["select_year(1i)"].present? && params["select_month(2i)"].present? #&& params["select_month(3i)"].present? # パラメーターで2020(1i)-06(2i)-01(3i)というスタイルで表示されていたので、コードもそれに合わせてやる。 select_day = params["select_year(1i)"] + "-" + # パラメーター上では、月日は「6」や「1」というふうに出ていたので上記のスタイルに合わせて比較させるので以下のよいうにフォーマットを合わせている。 format("%02d", params["select_month(2i)"]) + "-" + format("%02d", params["select_month(3i)"]) # @first_day = select_day.to_date.beginning_of_month # @last_day = @first_day.end_of_month # @household_account_books = @user.household_account_books.where(worked_on: @first_day..@last_day).order(:worked_on) params[:date] = select_day.to_date.beginning_of_month set_one_month end @household_account_book = @user.household_account_books.find_by(worked_on: @first_day) end # 収入画面 def show_2 if params["select_year(1i)"].present? && params["select_month(2i)"].present? #&& params["select_month(3i)"].present? # パラメーターで2020(1i)-06(2i)-01(3i)というスタイルで表示されていたので、コードもそれに合わせてやる。 select_day = params["select_year(1i)"] + "-" + # パラメーター上では、月日は「6」や「1」というふうに出ていたので上記のスタイルに合わせて比較させるので以下のよいうにフォーマットを合わせている。 format("%02d", params["select_month(2i)"]) + "-" + format("%02d", params["select_month(3i)"]) # @first_day = select_day.to_date.beginning_of_month # @last_day = @first_day.end_of_month # @household_account_books = @user.household_account_books.where(worked_on: @first_day..@last_day).order(:worked_on) params[:date] = select_day.to_date.beginning_of_month set_one_month end @household_account_book = @user.household_account_books.find_by(worked_on: @first_day) end def new @user = User.new end def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = '新規作成に成功しました。' redirect_to @user else render :new end end def edit end def update if @user.update_attributes(user_params) flash[:success] = "ユーザー情報を更新しました。" redirect_to @user else render :edit end end def destroy @user.destroy flash[:success] = "#{@user.name}のデータを削除しました。" redirect_to users_url end def edit_basic_info end def update_basic_info if @user.update_attributes(basic_info_params) flash[:success] = "#{@user.name}の基本情報を更新しました。" else flash[:danger] = "#{@user.name}の更新は失敗しました。<br>" + @user.errors.full_messages.join("<br>") end redirect_to users_url end private def user_params params.require(:user).permit(:name, :email, :phone_number, :password, :password_confirmation) end def basic_info_params params.require(:user).permit(:email, :phone_number, :password, :password_confirmation) end # beforフィルター # paramsハッシュからユーザーを取得します。 def set_user @user = User.find(params[:id]) end # ログイン済みのユーザーか確認します。 def logged_in_user unless logged_in? store_location flash[:danger] = "ログインしてください。" redirect_to login_url end end # アクセスしたユーザーが現在ログインしているユーザーか確認します。 def correct_user redirect_to(root_url) unless current_user?(@user) end # システム管理権限所有かどうか判定します。 def admin_user redirect_to root_url unless current_user.admin? end end
該当のソースコード(html)
<div> <table class="table table-bordered table-condensed user-table"> <tr> <td>名前:<%= @user.name %></td> </tr> </table> </div> <h1>【固定費一覧表】</h1> <div> <table class="table table-bordered table-condensed" id="table-attendances"> <tr> <td> <%= l(Date.today, format: :long) %> </td> </tr> <table> </div> <div> <% @household_account_books.each do |h| %> <% @all_total_income = @all_total_income.to_i + h.income_n.to_i + h.income_n_1.to_i + h.income_n_2.to_i + h.income_n_3.to_i + h.income_n_4.to_i + h.income_n_5.to_i + h.income_n_6.to_i + h.income_n_7.to_i + h.income_n_8.to_i + h.income_n_9.to_i + h.income_n_10.to_i %> <% @all_total_cost = @all_total_cost.to_i + h.fixed_n.to_i + h.fixed_n_1.to_i + h.fixed_n_2.to_i + h.fixed_n_3.to_i + h.fixed_n_4.to_i + h.fixed_n_5.to_i + h.fixed_n_6.to_i + h.fixed_n_7.to_i + h.fixed_n_8.to_i + h.fixed_n_9.to_i + h.fixed_n_10.to_i + h.fixed_n_11.to_i + h.fixed_n_12.to_i + h.fixed_n_13.to_i + h.fixed_n_14.to_i + h.fixed_n_15.to_i %> <% @all_total_cost_1 = @all_total_cost_1.to_i + h.variable_n.to_i + h.variable_n_1.to_i + h.variable_n_2.to_i + h.variable_n_3.to_i + h.variable_n_4.to_i + h.variable_n_5.to_i + h.variable_n_6.to_i + h.variable_n_7.to_i + h.variable_n_8.to_i + h.variable_n_9.to_i + h.income_n_10.to_i %> <% end %> ↓グラフのコードです <%= pie_chart @household_account_book %> <table class="table table-bordered table-condensed" id="table-attendances"> <tr> <th>収入</th> <th>支出(固定費 + 変動費)</th> <th>収支合計</th> </tr> <tr> <td><%= "#{@all_total_income.to_s(:delimited)}円" %></td> <td><%= "#{(@all_total_cost + @all_total_cost_1).to_s(:delimited)}円" "(#{@all_total_cost.to_s(:delimited)}円 + #{@all_total_cost_1.to_s(:delimited)}円)" %></td> <td><%= "#{(@all_total_income.to_i - (@all_total_cost + @all_total_cost_1).to_i).to_s(:delimited)}円" %></td> </tr> <table> </div> <div class="center"> <%= form_with(url: user_path(@user), method: :get, local: true) do |f| %> <%= f.date_select :select_year, {:discard_day => true, :discard_month => true, :use_month_numbers => true}, class: "form-control bootstrap-date" %> <%= f.date_select :select_month, {:discard_day => true, :discard_year => true, :use_month_numbers => true}, class: "form-control bootstrap-date" %> <button class="btn btn-primary"> 検索 </button><br><br> <% end %> </div> <div class="center"> <%= link_to "⇦ 前月へ", user_path(date: @first_day.prev_month), class: "btn btn-info" %> <%= link_to "1ヶ月の家計簿編集へ", household_account_books_edit_one_month_user_path(date: @first_day), class: "btn btn-success" %> <%= link_to "次月へ ⇨", user_path(date: @first_day.next_month), class: "btn btn-info" %> </div> 、 、 、 <tr> <td><%= "支出合計(固定)" %></td> <% @all_total_cost = @total_cost.to_i + @total_cost_1.to_i + @total_cost_2.to_i + @total_cost_3.to_i + @total_cost_4.to_i + @total_cost_5.to_i + @total_cost_6.to_i + @total_cost_7.to_i + @total_cost_8.to_i + @total_cost_9.to_i + @total_cost_10.to_i + @total_cost_11.to_i + @total_cost_12.to_i + @total_cost_13.to_i + @total_cost_14.to_i + @total_cost_15.to_i %> <td><%= "#{@all_total_cost.to_s(:delimited)}円" %></td> </tr> </tfoot> </table> </div>
試したこと
.group_by_dayを利用しようとしましたが、グループの指定の仕方が破るのだと思いますが、group_by_dayにエラーが発生します。
また、ネットの参考資料の中に、『@materials.group_by_day { |u| u.updated_at }.sum(:current_stock) 』
というコードがあり、eachするときの容量で欲しいデータあだけ抽出しようとしましたが、上手くいきません。
一週間以上悩んでいるのですが、解決できませんおで、ご指導の程よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー