前提・実現したいこと
家計簿のアプリケーションを作成していて、収入や支出を登録した後に登録したデータを一覧表示にさせるのですが、
データベースのデータとuserを紐づけて、紐づけたuserのデータのみを出力させたい。
現段階ではどのuserでも一覧表示のデータが変わらない。
発生している問題
どのユーザーでもこのような一覧表示がされ、userとデータが紐づいていないと考えています。
該当のソースコード
ruby
1incomes controller 2 3class IncomesController < ApplicationController 4 before_action :authenticate_user! 5 before_action :income_id, only: [:show, :edit, :update, :destroy] 6 before_action :income_user, only: [:index, :search] 7 before_action :spending_user, only: [:index,:search, :show] 8 before_action :move_to_index, only: [:show, :edit, :destroy, :update, :create] 9 require "time" 10 11 def index 12 @spendings_time = Spending.where(date: Time.now.beginning_of_month..Time.now.end_of_month).includes(:user).order(date: "ASC") 13 @incomes_time = Income.where(date: Time.now.beginning_of_month..Time.now.end_of_month).includes(:user).order(date: "ASC") 14 @spending_sum = @spendings_time.sum(:price) 15 @income_sum = @incomes_time.sum(:price) 16 @expense_sum = @income_sum - @spending_sum 17 @spending_data = Spending.all.where(date: Time.now.beginning_of_month..Time.now.end_of_month) 18 @this_month = Time.new.month 19 end 20 21 def new 22 @income = Income.new 23 end 24 25 def create 26 @income = Income.new(income_params) 27 if @income.save 28 redirect_to root_path 29 else 30 render :new 31 end 32 end 33 34 def show 35 end 36 37 def edit 38 end 39 40 def update 41 if @income.update(income_params) 42 redirect_to root_path 43 else 44 render :edit 45 end 46 end 47 48 def destroy 49 @income.destroy 50 redirect_to root_path 51 end 52 53 def search 54 end 55 56 private 57 def income_params 58 params.require(:income).permit(:price, :category, :memo, :date).merge(user_id: current_user.id) 59 end 60 def income_id 61 @income = Income.find(params[:id]) 62 end 63 def income_user 64 @incomes = Income.includes(:user).order(date: "ASC") 65 end 66 def spending_user 67 @spendings = Spending.includes(:user).order(date: "ASC") 68 end 69 def move_to_index 70 if current_user.id != @income.user.id 71 redirect_to root_path 72 end 73 end 74end 75 76 77
ruby
1index.html.erb 2 3<div class="center-content"> 4 <div class="title"><%= @this_month %>月の収入</div> 5 <div class="post-list-content"> 6 <% @incomes_time.each do |income| %> 7 <ul class="post-list"> 8 <li class="post-list-data-date"><%= income.date %></li> 9 <ul> 10 <li><%= link_to '詳細', income_path(income.id), class:"link_pass" %></li> 11 <li><%= link_to '編集', edit_income_path(income.id), class:"link_pass" %></li> 12 <li><%= link_to '削除', income_path(income.id), class:"link_pass", method: :delete %></li> 13 </ul> 14 <li class="post-list-data"><%= income.category %></li> 15 <li class="post-list-data"><%= image_tag 'money.png', size: '50x50' %>¥<%= income.price %></li> 16 </ul> 17 <% end %> 18 </div> 19 </div>
ruby
1incomeモデル(収入) 2 3class Income < ApplicationRecord 4 with_options presence: true do 5 validates :price, inclusion: { in: 1..100000000 }, format: {with: /\A[0-9]+\z/}, numericality: true 6 validates :category 7 validates :memo 8 validates :date 9 end 10 11 def start_time 12 self.date 13 end 14 15 16 17 18 belongs_to :user 19end 20 21
ruby
1spendingモデル(支出) 2 3class Spending < ApplicationRecord 4 with_options presence: true do 5 validates :price, inclusion: { in: 1..100000000 }, format: {with: /\A[0-9]+\z/}, numericality: true 6 validates :category 7 validates :memo 8 validates :date 9 end 10 11 def start_time 12 self.date 13 end 14 15 16 belongs_to :user 17end 18
試したこと
@incomes_time = Income.where(date: Time.now.beginning_of_month..Time.now.end_of_month).includes(:user).order(date: "ASC")
-
この記述で、
includes:user
としているのでuserと紐づているデータが取得できていると思う。(incomes controller) -
そして、
<% @incomes_time.each do |income| %>
とすることで該当する月のuserと紐づくデータをeachメソッドで出力させている。(index.html.erb) -
<%= income.category %>
,<%= income.date %>
,<%= income.price %>
で3つのデータを出力させている。 -
incomesコントローラーの以下の記述でuserと紐づく値が取得できていない?
@incomes_time = Income.where(date: Time.now.beginning_of_month..Time.now.end_of_month).includes(:user).order(date: "ASC")
どなたかご教授いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/05 10:00
2021/04/05 11:26
2021/04/05 11:42