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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

620閲覧

保存したデータがビューに表示されない。

keisuke.F

総合スコア19

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/02 07:27

お世話になっております。

現在、カラオケで歌う曲を保存するアプリケーションを作成しております。

#解決したいこと
登録画面で、入力したものがroot_pathに反映されない。

index.html.haml

Ruby

1.main 2 .table-responsive 3 %table.chart 4 %thead.chart__top 5 %tr 6 %th アーティスト 7 %th タイトル 8 %th レベル 9 %th メモ 10 %tbody.chart__contents 11 %tr.chart__contents--item 12 %td 13 = @song.artist 14 %td 15 = @song.title 16 %td 17 = @song.level_i18n 18 %td 19 = @song.content

new.html.haml

Ruby

1.header 2 .header-logo 3 = link_to 'Song_Regi', root_path 4 .header-content 5 = link_to '曲一覧に戻る', root_path 6 7.main 8 .registration 9 = form_for @song, html: {class: 'form-group'} do |f| 10 = f.label :artist, class: "form-title" 11 = f.text_field :artist, class: 'form-control', placeholder: "アーティストを入力" 12 = f.label :title, class: "form-title" 13 = f.text_field :title, class: 'form-control', placeholder: "曲名を入力" 14 = f.label :level, class: "form-title" 15 = f.select :level, Song.levels_i18n.invert, {}, class: 'form-control' 16 = f.submit '作成する', class: "btn-primary"

songs.controller.rb

Ruby

1class SongsController < ApplicationController 2 3 def index 4 @song = Song.new 5 end 6 7 def new 8 @song = Song.new 9 end 10 11 def create 12 @song = Song.new(song_params) 13 @song.save 14 redirect_to root_path 15 end 16 17 private 18 def song_params 19 params.require(:song).permit(:title, :artist, :level, :content) 20 end 21 22end

songs.rb

Ruby

1class Song < ApplicationRecord 2 enum level: {sing: 0, practice: 1} 3end

DBには保存されるのですが、ビューに反映されていない状況です。
ビューにはselectの”歌える”が固定されて表示されている状態です。

ストロングパラメータも疑ったのですが、自分なりに調べて実装した結果でこれ以上見当がつきません。

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

@song = Song.new 

は空のデータを作成するだけです
DBに保存してるものを取得するなら

Song.all

とか

Song.where(...)

とかですね


Song.all や Song.where(...) の返り値には Song レコードの配列が入ってきます
(正確には必要になったときに実行されるリレーション)

なので @songs から1個1個ループを回して中身を1行ずつ表示する感じになります
たぶんこんなかんじ
ループ内のスコープでは @songs じゃなく song なのに注意

%tbody.chart__contents - @songs.each do |song| %tr.chart__contents--item %td = song.artist %td = song.title %td = song.level_i18n %td = song.content

ちなみにほぼ Rails のテンプレそのままのことをやろうとしてるみたいなので
rails g scaffold_controller Song
とかやると view が勝手にできるはずです

投稿2020/07/02 07:32

編集2020/07/02 08:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

keisuke.F

2020/07/02 07:48

ご回答ありがとう御座います。 コントローラーを@song = Song.allに変更したところ、次のようなエラーが出ました。 NoMethodError in Songs#index undefined method `artist' for #<ActiveRecord::Relation []> artistが定義されていないというエラーだと思うのですが、自分の理解では間違いが見つけられません。 カラム名と一致していますし、そのほかにどこか原因があるのでしょうか。
退会済みユーザー

退会済みユーザー

2020/07/02 07:53

@songs は複数形なので row ごとにループを回して表示することになります railg g scaffold song でやるとテンプレのビューは生成してくれると思うのでそこから必要な修正を行ってはどうですか?
keisuke.F

2020/07/02 08:16 編集

表示されるようになりました。 しかし、 保存したデータの上に [#<Song id: 48, artist: "あああ", title: "ああああ", content: nil, created_at: "2020-07-02 08:14:02", updated_at: "2020-07-02 08:14:02", level: "practice">] と表示されてしまっています。 現在もコードを確認中ですが、コード自体におかしな点はありますでしょうか。
退会済みユーザー

退会済みユーザー

2020/07/02 08:15

追記読んでもらっていいですか?
keisuke.F

2020/07/02 08:16

読ませていただいて、コメントを編集させていただきました。
退会済みユーザー

退会済みユーザー

2020/07/02 08:21 編集

index.html.haml を置き換えなければやりたいことはできてるはずです おきかえるときにループを消してしまってるせいです その状態から ruby の値は変更せずタグとクラスだけを変更していけばやりたいことはできるかと
退会済みユーザー

退会済みユーザー

2020/07/02 08:18

ごめんなさい = @songs.each do |song| これが - ですね
keisuke.F

2020/07/02 08:20

解決できました。 ご丁寧にありがとう御座います...!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問