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

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

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

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

Q&A

解決済

1回答

747閲覧

【rubyonrails】新規登録ができない(エラー表示なし)

rororo11

総合スコア1

Ruby on Rails

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

0グッド

0クリップ

投稿2021/12/06 08:09

編集2021/12/06 08:38

前提・実現したいこと

Ruby on railsで簡単なアプリケーションを作成しています。
テキスト登録フォームと登録データ一覧(index)を同じ画面に表示するようにしています。
※初心者ですので、以下分かりにくい箇所があるかもしれません。必要情報があればご教示いただけますと幸いです。

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

フォーム入力→登録ボタンをクリックしても画面表示が何も変わりません。
(本来であれば、登録データ一覧に登録内容の追加と、"Book was successfully created."というメッセージが表示されます)
logを確認したところ、フォーム入力したデータは変数に格納されているようですが
その後うまく保存されていないようです。
↓log
イメージ説明

該当のソースコード

■コントローラー

class BooksController < ApplicationController def show @book = Book.find(params[:id]) end def index @books = Book.all @book = Book.new end def new @book = Book.new end def create @books = Book.all @book = Book.new(book_params) if @book.save flash[:success] = "Book was successfully created." redirect_to book_path(@book.id) else render "index" end end def edit @book=Book.find(params[:id]) end def update @book=Book.find(params[:id]) if @book.update(book_params) flash[:success] = "Book was successfully updated." redirect_to book_path(@book) else render "edit" end end def destroy book=Book.find(params[:id]) if book.destroy flash[:success] = "Book was successfully destroyed." redirect_to books_path end end private def book_params params.require(:book).permit(:title,:body) end end

■ルーティング

Rails.application.routes.draw do get "/" => "homes#top" resources :books # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end

■ビュー

<h1>Books</h1> <body> <table> <thead> <tr> <th>title</th> <th>Body</th> <th colspan="3"></th> </tr> </thead> <tbody> <tr> <% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.body %></td> <td><%= link_to 'Show', book_path(books.id) %></td> <td><%= link_to 'Edit', edit_book_path(books.id) %></td> <a><td><%= link_to 'Destroy', book_path(books.id), method: :delete, data: { confirm: 'Are you sure?' } %></td></a> </tr> <% end %> </tr> </tbody> </table> <br> <h2>New book</h2> <form class="new_book"> <% if @book.errors.any? %> <div class="alert-danger"> <%= @book.errors.count %>errors prohibited this book from being saved: <ul><% @book.errors.full_messages.each do |message| %> <li class="alert-danger-list"><%= message %></li> <% end %> </ul> </div> <% end %> <%= form_with model:@book, local:true do |f| %> <h4>Title</h4> <%= f.text_field :title %> <h4>Body</h4> <%= f.text_area :body %> <div class="actions"> <%= f.submit 'Create Book' %> </div> <% end %> </form> </body>

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

フォームのHTMLはこちらです
イメージ説明

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

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

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

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

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

winterboum

2021/12/06 08:24

Started GET になってますね。POSTでないと create に行きません。 なんか変ですね。。
winterboum

2021/12/06 08:31

form_with model:@book, local:true do のところが、実際の html ではどのようになっているか教えてください
rororo11

2021/12/06 08:39

ありがとうございます。補足情報に追加しました。 よろしくお願いいたします。
winterboum

2021/12/06 09:31

こういうの画層でなくてtextにして欲しい。 で、method postになってますね。 なのになぜ GET で来るのか。。。
guest

回答1

0

ベストアンサー

あぁ <form>が二重になってます。<form class="new_book"> とそれに対応する </form>を削除してください

投稿2021/12/06 09:33

winterboum

総合スコア23324

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

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

rororo11

2021/12/06 11:00

ありがとうございます!無事動きました。 <form>タグが2つあり、1つ目のタグがPOST、本来使いたかったタグの方がGETになってしまったという認識であっていますでしょうか?
winterboum

2021/12/06 11:04

多分外側のformで動いてるのでしょう
rororo11

2021/12/06 11:27

理解しました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問