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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

530閲覧

バリデーションによるエラーメッセージが表示されない

nimu

総合スコア2

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/01/06 08:00

前提

プログラミング初心者な為専門用語等わからないことが多くあります
調べながらの対応になる為返答が遅くなる場合があります。
誤字、脱字等もあるかと思いますがご指摘ください。

実現したいこと

本の感想を投稿するサイトを作成し、バリデーションを実装。
バリデーションはcreate、updateが失敗したときにエラーメッセージも表示させる

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

エラーメッセージは表示されず、それぞれのリダイレクト先にリダイレクトされる

該当のソースコード

index.html.erb

1<h1>books</h1> 2 <table> 3 <thead> 4 <tr> 5 <th>title</th> 6 <th>body</th> 7 <th></th> 8 </tr> 9 </thead> 10 <tbody> 11 <% @books.each do |book| %> 12 <tr> 13 <td><%= book.title %></td> 14 <td><%= book.body %></td> 15 <td><%= link_to "show",book_path(book.id) %></td> 16 <td><%= link_to "edit",edit_book_path(book.id) %></td> 17 <td><%= link_to "destroy",book_path(book.id), method: :delete,"data-confirm" => "Are you sure?" %></td> 18 </tr> 19 <% end %> 20 </tbody> 21 </table> 22 23 <h3>New Books</h3> 24 <% if @book.errors.any? %> 25 <%= @book.errors.count %>errors prohibited this book from being saved 26 <ul> 27 <% @book.errors.full_messages.each do |message| %> 28 <li><%= message %></li> 29 <% end %> 30 </ul> 31 <% end %> 32 33<%= form_with model: @book do |f| %> 34 35 <h4>title</h4> 36 <%= f.text_field :title %> 37 38 <h4>body</h4> 39 <%= f.text_area :body %> 40 41 <%= f.submit'Create Book' %> 42<% end %>

edit.html.erb

1<p id="notice"><%= notice %></p> 2 <h1>Editing Book</h1> 3 <% if @book.errors.any? %> 4 <%= @book.errors.count %>error prohibited this book from being saved 5 <ul> 6 <% @book.errors.full_messages.each do |message| %> 7 <li><%= message %></li> 8 <% end %> 9 </ul> 10 <% end %> 11 12<%= form_with model: @book, url: update_book_path(@book.id), method: :patch do |f| %> 13 14 <h4>Title</h4> 15 <%= f.text_field :title %> 16 17 <h4>Body</h4> 18 <%= f.text_area :body %> 19 <h4></h4> 20 <%= f.submit'Update Book' %> 21<% end %> 22 23 <span> 24 <%= link_to "show",book_path(@book.id) %> 25 </span> 26 <span>|</span> 27 <span> 28 <%= link_to "back","/books" %> 29 </span>

books.cotroller.erb

1class BooksController < ApplicationController 2 def new 3 end 4 5 def index 6 @book = Book.new 7 @books = Book.all 8 end 9 def create 10 book = Book.new(book_params) 11 if book.save 12 flash[:notice] = "Book was successfully created." 13 redirect_to book_path(book.id)#, notice: "You have created book successfully." 14 else 15 @book = Book.new 16 @books = Book.all 17 render :index 18 end 19 end 20 def show 21 @book = Book.find(params[:id]) 22 end 23 24 def edit 25 @book = Book.find(params[:id]) 26 end 27 def update 28 book =Book.find(params[:id]) 29 if book.update(book_params) 30 flash[:notice] = "Book was successfully updated." 31 redirect_to book_path(book.id) 32 else 33 @book = Book.find(params[:id]) 34 render :edit 35 end 36 end 37 38 def destroy 39 book = Book.find(params[:id]) 40 book.destroy 41 redirect_to '/books' 42 end 43 44 private 45 def book_params 46 params.require(:book).permit(:title, :body) 47 end 48end 49

試したこと

特にないです。
これを実施してみたら?等あればご教授いただけると幸いです。

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

ruby 3.1.2p20
Rails 6.1.7
cloud9

railsに関して知識不足を痛感しているので自分自身の勉強の為にも
なにが悪くてこういう理由でこう処置する等ご教授いただけると幸いです。

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

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

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

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

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

guest

回答2

0

これを実施してみたら?等あればご教授いただけると幸いです。

Railsの書き方の基本はScaffoldです。
なので、個人的におすすめなのは、このScaffoldをベースにカスタマイズしていくという流れをおすすめします。

  1. 新しくプロジェクトを作る
  2. rails g scaffold book title:string body:textを実行する
  3. rails db:migrateを実行する

上記で、「バリデーションによるエラーメッセージが表示されて、CRUDのできるBookページ」が出来上がります。
それをベースにして既存のコードの振る舞い(例えばcreateのあとindexに遷移するなど)へ修正していくのが良いかと思います。


初学者の方がCRUDなどのRailsの作法の理解が十分でないなかで、1からコードを書いて、それを理解するのは難しいと思います。
そのうちScaffoldって何をしているんだろう・・・とか、そもそも処理の流れってどうなっているんだろうってことが気になってきたら少しずつ下記を読み込んでいただくと理解も深まりやすいかと思います。

投稿2023/01/06 13:33

no1knows

総合スコア3365

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

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

nimu

2023/01/07 02:30

コメントありがとうございます。 前提に記述していなかったのですがScaffoldを使用しないで開発するのが条件となっていました。 Scaffoldを使用する際に利用させて頂きます。 繰り返しになりますがものすごく丁寧なコメントありがとうございました! また困って質問した際に助けてください。笑
no1knows

2023/01/07 03:32

以下、おっさんのたわごとです。 ちょっと考えてみてください。 お手本があって、お手本の存在をしっているのに、お手本を見ずに、人に聞いて、教えてもらう。 そんな人、どう思いますか?わからないことがあったら、毎回、聞いてくる人と一緒に仕事したいですか? > Scaffoldを使用する際に利用させて頂きます。 DHHさんがScaffoldを使わずに書いたコードを、コミュニティのみんなが、よりわかりやすく、より共通化して、より見やすくした結果、出来上がったのが、Scaffoldなのです。 だからわからないことがあれば、もしくは自作コードがうまく動かなければ、まずはScaffoldを見て、自分のコードと比較して理解して書き方を学んでいくのが良いと思います。 さて、あなたは何をすると一番早く、Ruby on Railsの設定より規約を遵守したコードがかけるようになるのでしょうか?
nimu

2023/01/08 01:33

ご指摘ありがとうございます! 説明不足だらけですいません! 課題に取り組んでいまして、その条件で Scaffoldを使用せずに開発するというのが ありました! Scaffoldとは何か現段階で理解していません。 なにもかもわからないままで次の事に 進んでいいのかわからずにScaffoldについて まだ調べられていないのが本音です! なのでScaffoldを理解したらもっとRuby on Railsについて理解が深まるのかもしれませんが そこは後から遠回りしたなぁと感じる部分かもしれません! なんでもかんでも聞くのは正しくはないと思います!自分でもわからないところがわからない状態なので正しい処置を教えてもらってもなんでそうなるのか、自分の今の知識と照らし合わせみたいなことが出来ればいいなと考えてます! コメントにいただいたリンクは目を通して ちょっとでも理解ができる様努力します! コメントありがとうございました!
no1knows

2023/01/08 02:06

たわごとに丁寧なコメントありがとうございます。 なんのための課題なんでしょうね。 まず難しい課題を出して、ほら、Scaffoldをやるとすごいだろうって言いたいのかな。。。 そんなことしても時間ばっかりかかって、得るものが少ないのに。。。 まぁ、気が向いて10分ぐらいあったら、一度、1〜3までをやって、Scaffoldを試してみてください。 Scaffoldとは何かとか調べる必要もなく、Terminalで打てば、Scaffoldとは何かがわかると思います。 そしたらcreate時のバリデーションエラーの解決の糸口も見えると思いますよ!
guest

0

ベストアンサー

update で @book を定義していなかったり、再代入してたりするじゃないでしょうか?
@book をいちど定義したらそれを使いまわしてはいかがでしょう

rb

1def update 2 @book = Book.find(params[:id]) 3 4 if @book.update(book_params) 5 flash[:notice] = "Book was successfully updated." 6 redirect_to book_path(book.id) 7 else 8 render :edit 9 end 10end

投稿2023/01/06 09:07

yuma.inaura

総合スコア1453

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

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

nimu

2023/01/07 02:44

update時のバリデーション表示されるようになりました!! ありがとうございます!! さらに質問になって申し訳ないのですが create時にもバリデーションを表示させたい時 ```controller def create book = Book.new(book_params) if book.save flash[:notice] = "Book was successfully created." redirect_to book_path(book.id)#, notice: "You have created book successfully." else @book = Book.new @books = Book.all render :index end end ``` updateの時同様に@bookを再代入せずにrails sすると NoMethodError in Books#create Showing /home/ec2-user/environment/bookers/app/views/books/index.html.erb where line #11 raised:エラーになるのですがこれの対処についても ご教授いただけますか? お手数かけてすみません。
yuma.inaura

2023/01/07 02:49

どの行のエラーでしょうか?
yuma.inaura

2023/01/07 04:16

updateと構造が異なる箇所を比べてみましょう しばらく頑張って無理なら別の質問を作ってみてはいかがでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問