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

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

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

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

Ruby on Rails

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

Q&A

0回答

824閲覧

[Rails] edit→updateアクションが更新できないため解決したいです。

geekhub

総合スコア0

Ruby on Rails 5

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/06/27 14:06

前提・実現したいこと

Rails初心者のものです。
同じページに一覧情報と投稿ページを置いており
createで新規投稿した後にedit → updateアクションを実行したら
変更内容が上書きされるようにしたいです。

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

Railsで簡単なwebアプリケーションを作っており、
editからupdateアクションで上書きをした後に
変更した内容の情報が変更されず困っています。

一覧画面と投稿画面を同じページに置いているため
うまくいかないのかもしれませんが
原因がわからず泥沼にはまってしまっております。

エラーメッセージ

エラーメッセージはでませんが、
変更後にupdateをしても一番初めの投稿から
何も変化が起きず、エラーも起きません。

ルーティング

get '/' => 'homes#top'
get 'books' => 'books#index'
get 'books/:id/edit' => 'books#edit', as: 'booksedit'
get 'books/:id' => 'books#show', as: 'booksshow'
post 'books' => 'books#create'
patch 'books/:id' => 'books#update', as: 'booksupdate'
delete 'books/:id' => 'books#destroy', as: 'booksdestroy'

end

コントローラー

class BooksController < ApplicationController

def top
@book = Booker.new
end

def new
@book = Booker.new
end

def index
@books = Booker.all
end

def create
book = Booker.new(book_params)
book.save
redirect_to booksshow_path(book.id)
end

def show
@book = Booker.find(params[:id])
end

def destroy
book = Booker.find(params[:id])
book.destroy
redirect_to request.referer
end

def edit
@book = Booker.find(params[:id])
end

def update
book = Booker.find(params[:id])
book.update(book_params)
redirect_to booksshow_path(book.id)
end

private

def book_params
params.permit(:Title, :Body)

end

end

###index html (viewファイル)

<body class="indexbody"> <h1 class="indexh1">Books</h1> <table class="table"> <thead class="thead"> <tr> <th>Title</th> <th>Body</th> <th colspan="3"></th> </tr> </thead>
<tbody> <% @books.each do |f| %> <tr> <td class="td1"><%= f.Title %></td> <td class="td1"><%= f.Body %></td> <td class="td1"><%= link_to "Show", "/books/#{f.id}" %></td> <td class="td1"><%= link_to "Edit", "books/#{f.id}/edit" %></td> <td class="td1"><%= link_to "Destroy", "books/#{f.id}", method: :delete, "data-confirm" => "Are you sure?" %></td> </tr> <% end %> </tbody>
</table> <h2>New book</h2> <%= form_with model:@book, local:true do |f| %> <h4>Title</h4> <%= f.text_field :Title %> <h4>Body</h4> <%= f.text_area :Body %> <%= f.submit 'Create Book' %>

<% end %>

</body>

試したこと

ストロングパラメーターにparams.require(:user).permit(:Title, :Body)を
記載すると変更した内容が上書きされるのですが(requireの箇所)
今度はcreateアクションができなくなったしまう現象が起きます。

requireの箇所を削除すると今度は投稿ができなくなり
編集ができるようになります。

https://qiita.com/kazuki13070311/items/cdd4917af204e00de001
このURLも参考にしたのですがうまくいきませんでした。

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

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

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

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

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

maisumakun

2021/06/27 22:39

・Bookerの定義はどのようなものでしょうか? ・(Bookerが単なるモデルであれば)それをBookersControllerではなくBooksControllerで扱っている意図はどのようなものでしょうか?
geekhub

2021/06/28 00:47

モデル名はbookerで定義する必要があったためbookerにしましたが、 コントローラー名はそれに単数にしないといけませんでしたね..。 コントローラー名変更したらエラーになってしまったたゼロから作り直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問