質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

660閲覧

各月、各年のテーブルを検索し指定して表示させたい。

sh11821783

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/05/16 11:09

編集2021/05/29 00:32

現在、家計簿アプリを開発中なのですが、prev_month、next_monthで前月以前のテーブルを見れるようにしており、また、次月以降のテーブルも見れるようにしているのですが、例えば、5ヶ月前のテーブルを表示したいとなった場合、prev_monthで一つずつ月を遡らないといけない為、これを年月を検索してすぐに表示できるようにしたいと考えております。
以下に画像添付いたします。ご教授お願い致します。
イメージ説明

下記は、追記で一ヶ月ごとに月のデータを見れるようにしてあります。

<div class="btn-users-show"> <%= 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>

固定費画面

def show @household_account_book = @user.household_account_books.find_by(worked_on: @first_day) end

一ヶ月分のデータ取得するコントローラ

def set_one_month @first_day = params[:date].nil? ? Date.current.beginning_of_month : params[:date].to_date @last_day = @first_day.end_of_month one_month = [*@first_day..@last_day] # 対象の月の日数を代入します。 # ユーザーに紐付く一ヶ月分のレコードを検索し取得します。 @household_account_books = @user.household_account_books.where(worked_on: @first_day..@last_day).order(:worked_on) unless one_month.count == @household_account_books.count # それぞれの件数(日数)が一致するか評価します。 ActiveRecord::Base.transaction do # トランザクションを開始します。 # 繰り返し処理により、1ヶ月分の勤怠データを生成します。 one_month.each { |day| @user.household_account_books.create!(worked_on: day) } end @household_account_books = @user.household_account_books.where(worked_on: @first_day..@last_day).order(:worked_on) end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

色んな方にご指導いただき、どうにか解決いたしました。

有難うございました。

show.html

<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="button btn-primary"> 検索 </button><br><br> <% end %> </div>

showアクション

def show # 1iには、『年』、 2iには『月』、 3iには『日』が入る。 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)"]) # 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

私の備忘録兼どなたかの助けになれば幸いです。

また、ご協力していただいた方々に感謝致します。

投稿2021/05/30 13:53

sh11821783

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私はこんな画面にして、真ん中のtextエリアを書き換え可能にしてやってます

投稿2021/05/17 13:15

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sh11821783

2021/05/23 03:15

お返事遅くなり申し訳ございません。 お手数ではありますが、何かヒントになる記事など頂けましたら非常に助かります!
winterboum

2021/05/23 04:30

記事みてつくったわけではないので。 text のところに 現在表示の月をいれ、そこが修正されたら on change で << や >> と同じ様な処理をおこないます。
sh11821783

2021/05/23 11:24

お世話になっております。 上記は、ransakを用いた書き方でしょうか? 検索し続けていますが、指定して検索し、その月のテーブルの情報を抜くことができません。 もう少し詳しくご教授いただけましたら助かります!
winterboum

2021/05/23 11:58

月のデータを抜くところはデータの持ち方しだいで違いますから私のは参考にならないでしょう。 「prev_month、next_monthで前月以前のテーブルを見れるようにしており」ってありますね そこはどうしてます? そこのcodeと同じようにすればよいのですが。
sh11821783

2021/05/23 14:00

お世話になっております。 一ヶ月ごとに切り替える箇所のコードを添付致しましたのでよろしくお願い致します。
sh11821783

2021/05/29 00:33

お世話になっております。 お返事遅くなり申し訳ございません。 コントローラのコードも添付させて頂きました。 お忙しい中、ご対応して頂き有難うございます。
winterboum

2021/05/29 00:46

年月日入力部分が on change したら、その値をパラメータにして、 set_one_month へ(JS(ajax)を使って)飛べばよいです。
sh11821783

2021/05/30 13:51

何度も教えて頂き有難うございました。 onchangeメソッドの使い方がいまいち理解できない中で、なんとか別の方法で解決に至りました。 本当にお付き合いしてくださり誠に有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問