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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1405閲覧

(Ruby on Rails)保存した内容へのリンク時に発生するNoMethodErrorを解決して、保存内容の閲覧ができるようにしたいです。

rigomammo

総合スコア5

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/14 09:41

前提・実現したいこと

Ruby on Railsでカレンダー機能(simple_calender)を導入して日記アプリの様なものを作成しています。
日付ごとに日記を保存できるようにし、保存した内容を閲覧しようとしてトップページ画面からリンクをクリックすると、以下のようなエラーメッセージが発生しました。

発生している問題・エラーメッセージ

NoMethodError in Notes#show undefined method `reject' for #<Note:0x00007fb52a4d7678>

エラー画面です。

該当のソースコード

haml

1.header 2 .header__title 3 日記 4 5.body 6 .sidebar 7 .sidebar__text 8 .sidebar__calendar 9 = month_calendar events: @notes do |date, notes| 10 = date.day 11 - notes.each do |note| 12 = note.title 13 .main 14 .diary 15 .diary__time 16 = @notes.start_time 17 .diary__title 18 = @notes.title 19 .diary__content 20 = @notes.content

関連すると思われるソースコードも掲載させていただきます。

class NotesController < ApplicationController def index @notes = Note.all end def new @notes = Note.all @note = Note.new end def create @note = Note.create(note_params) if @note.save redirect_to root_path end end def show @notes = Note.find(params[:id]) end private def note_params params.require(:note).permit(:title, :content, :start_time) end end

試したこと

showアクションに遷移した際に@notesの中身を確認しましたが、中身はちゃんと入っていました。
https://gyazo.com/6bbab058d02a69be1b1b3ca6d0a64b0a

該当のソースコードはshow.html.haml index.html.hamlの両方に使用していますが、show.html.hamlを読み込む際にのみ今回のようなエラーが発生してしまいます。

補足情報(FW/ツールのバージョンなど)

RailsのバージョンはRails 5.2.4.2です。
足りない情報があればお申し付けください。基本的な質問のようで恐縮ですが、何卒よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

気になるのは

ruby

1@notes = Note.find(params[:id])

findは単数のレコードを取得するメソッドです。
@noteと単数形にした方が後に混乱しづらくなります。

そして

haml

1= month_calendar events: @notes do |date, notes|

それを複数形のevents引数として渡しています。

複数形にするか単数形にするかが悩ましいですが

Notes#showならば単数形で統一したほうが良さげなので

ruby

1@note = Note.find(params[:id])

haml

1= month_calendar events: [@note] do |date, notes|

ですかね

投稿2020/06/14 16:24

asm

総合スコア15149

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

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

rigomammo

2020/06/14 17:21 編集

ありがとうございます!無事エラーが解決しました! findメソッドの定義から@notesではなく@noteにすべきなのは納得しました。 events:の後ろを@noteではなく[@note]にすることで今回のエラーが解消されたのですが、どういった意味の違いがあるのでしょうか。
asm

2020/06/14 17:54 編集

配列に格納することで、単数のものを複数にしています。 (「ActiveRecordの複数形」が前提なライブラリもありますが、今回はそうではなかったようですね)
rigomammo

2020/06/21 10:33

遅くなりましたが、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問