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

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

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

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

1回答

329閲覧

Ruby on Rails 登録した年月日を取得し、ビューに描画させたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2022/01/20 11:26

編集2022/01/24 09:06

実現したいこと

現在Ruby on Railsにおいて、「買いたい物を、金額及び買うタイミングを連携して記録できる」という簡単なメモアプリケーションのようなものを作成しております。

簡単に機能を説明すると
①フォームにて買いたいもの・金額・買うタイミングを入力。
②買いたいもの一覧にて、上記の一覧と、合計金額を描画する。
③登録した日付を年・月・日で期間を絞ることで、年間・月間・日間の買いたいもの一覧・合計金額を描画する。

という内容となっております。

実現したいこととしては、③の期間を絞って買いたいもの一覧を描画させたいのですが
https://teratail.com/questions/p8z87f41lmjui1
上記URLの質問にて、コントローラー内の記述を

month = Time.new(2020,1,1) # としておいて Item.where(created_at: month.beginning_of_month..month.end_of_month)

にするといった回答をwinterboum様から頂いておりましたが(winterboum様ありがとうございました)、
いざ記述というところで期待していた結果とはならなかったため、再度皆様のお力をお借りしたく質問致します。

コード

登録フォーム

rb

1<<-------->> 2<div class="new_form"> 3 <%= form_with(model: @item, local: true) do |f| %> 4 <%= f.label :name, '欲しいもの' %> 5 <%= f.text_field :name %> 6 </div> 7 <div> 8 <%= f.label :price, '金額(半角で入れてね!)' %> 9 <%= f.text_field :price %> 10 </div> 11 <div class=“buy_month”> 12 <%= f.label :買うタイミング %> 13 <%= f.date_select :buy_month, { 14 use_month_numbers: true, 15 start_year: (Time.now.year), 16 end_year: 2030, 17 date_separator: '/' 18 } %> 19 </div> 20 <%= f.submit "欲しい!", class: "btn btn-primary" %> 21 <%= link_to "BUTSUYOKU一覧", '/items/index' %> 22 <% end %> 23</div> 24 25

コントローラー

rb

1class ItemsController < ApplicationController 2 def new 3 @item = Item.new 4 end 5 6 def show 7 @item = Item.find(params[:id]) 8 end 9 10 def index 11 @items = Item.all 12 @ItemsAllSum = Item.all.sum(:price) 13 end 14 15 def create 16 @item = Item.new(item_params) 17 if @item.save 18 flash[:success] = "欲しがりさんめ!" 19 redirect_to '/items/index' 20 else 21 flash[:danger] = "何ゆーてますの?" 22 render 'new' 23 end 24 end 25 26 def destroy 27 @item = Item.find(params[:id]) 28 @item.destroy 29 redirect_to '/items/index' 30 end 31 32 def search_date 33 search_date = Time.new(2022, 1, 1) 34 end 35 36 def month 37 month = Item.where(buy_month: search_date.beginning_of_month..search_date.end_of_month) 38 end 39 40 helper_method :search_date, :month 41 private 42 43 def item_params 44 params.require(:item).permit(:name, :price, :buy_month) 45 end 46 end 47# 編集しました。(2022/1/24)

一覧ページ

rb

1<ul> 2 <% @items.each do |item| %> 3 <li>欲しいもの : <%= item.name %></li> 4 金額 : <%= item.price %>円 5 <%= item.buy_month %>に買います 6 <%= link_to "削除", '/items/' + item.id.to_s, method: :delete %> 7 <% end %> 8</ul> 9 10<div class=“index”> 11 <p>君の物欲合計金額は...<%= @ItemsAllSum %>円</p> 12 <p><%= link_to "まだ何か欲しいの?", '/' %><p> 13</div> 14 15 16<%= "1月に買うものは..." %> 17 <% month.each do |month| %> 18 <%= "#{month.name}" %> 19 <% end %> 20# 編集しました。(2022/1/24)

しかし<%= month.name %>の結果は 「Item」とだけ返ってきます。
ここではnewフォームで登録している欲しいものの名前が返ってくることを期待しておりました。
なぜこのような結果になったのか皆目検討もつきません。
ダラダラと長い質問となってしまいました。
どなたかアドバイスを頂けないでしょうか?
何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「monthメソッドのname」というのが意味不明。。。。
コントローラー内で前述しているメソッドをviewで使うことはできません。
<%= month.name %> でエラーにならないとすると、viewのどこかで monthを定義しています。
それらを省略されると原因がわかりません。

投稿2022/01/21 02:34

winterboum

総合スコア23345

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

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

退会済みユーザー

退会済みユーザー

2022/01/24 09:18

winterboum様、コメント頂きありがとうございます。 重ねて、頓珍漢な質問をしてしまい申し訳ございませんでした。 当初の考えとしては、 def search_date item = Item.find_by(params[:id] search_date = item.buy_month end で登録した買うタイミングを取得しておりましたが、そもそも登録した買うタイミングを基準にしてsearch_dateを定義するのはおかしい事だと気づきました。 よって、当初winterboum様にご回答頂いた内容にて def search_date search_date = Time.new(2022, 1, 1) end で定義し直し、 def month month = Item.find_by(buy_month: beginning~以下略) end でmonthを修正しました。 index.html.erbではeach文を用いて記述しましたが、これで描画できたことを確認しております。 返信が遅くなりましたこと、お詫び申し上げます。 ご対応いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問