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

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

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

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

Q&A

解決済

2回答

952閲覧

Rails、updateのエラーの解決。

sattaku1538

総合スコア7

Ruby

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/12/07 05:45

イメージ説明

投稿機能のサイト作成しています。
Edit→Updateに実行した際に添付した画像のエラーが出てきます。解決方法を教えていただきたく、お願い申し上げます。

controller

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

view

1<div class='container'> 2 <div class='row'> 3 <div class="col-sm-12 col-md-8 col-lg-5 px-5 px-sm-0 mx-auto"> 4 5 <h1>Editing Book</h1> 6 <%= form_with model:[:public, @book], local:true do |f| %> 7 <div class="form-group"> 8 <%= f.label :title %> 9 <%= f.text_field :title, class: 'form-control', size: "20x10" %> 10 </div> 11 <div class="form-group"> 12 <%= f.label :image %> 13 <%= f.attachment_field :image, class: 'form-control', size: "20x10" %> 14 </div> 15 <div class="form-group"> 16 <%= f.label :place %> 17 <%= f.text_area :place, class: 'form-control', size: "20x10" %> 18 </div> 19 <div class="form-group"> 20 <%= f.label :explanation %> 21 <%= f.text_area :explanation, class: 'form-control', size: "20x10" %> 22 </div> 23 <div class="form-group"> 24 <%= f.submit "編集内容を保存する", class: "btn btn-dark save col-xs-6" %> 25 <%= link_to 'Show', public_book_path(@book), class: "book_#{@book.id} btn btn-dark back col-xs-6" %> | 26 <%= link_to 'Back', public_books_path, class: "back" %> 27 </div> 28 <% end %> 29 30 </div> 31</div>

Route

1namespace :public do 2 root to: 'homes#top' 3 4 resources :books, only: [:new, :index, :show, :edit, :create, :destroy, :update] 5 6 7 resources :customers, only:[:show, :edit, :index, :update] 8 get 'customers/unsubscribe' 9 patch 'customers/withdraw' 10 11 end

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

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

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

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

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

guest

回答2

0

エラーメッセージの通り、@booknilです。@bookを取得するコードを追加しましょう。

投稿2021/12/07 06:12

maisumakun

総合スコア145121

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

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

sattaku1538

2021/12/07 10:07

申し訳ないのですが、もう少し、具体的な回答をいただけないでしょうか。 @bookを取得するコード(@book = Book.find(params[:id]))を記述しましたが、エラーが起きています。その件も含めて質問をさせていただいています。お手数ですが、ご回答よろしくお願いします。
maisumakun

2021/12/07 10:08

> @bookを取得するコード(@book = Book.find(params[:id]))を記述しましたが updateにはありません。
sattaku1538

2021/12/07 10:13

失礼しました。質問内容には載せておりませんが、小職の方で(@book = Book.find(params[:id]))を記述してRails sを実行しています。その点も含めて、回答をいただけたらと思います。
maisumakun

2021/12/07 10:15

どこに書いたのですか? (冒頭のエラーメッセージ部分にもその行は出ていないようです)
sattaku1538

2021/12/07 10:20

Controllerに記述しました。 def update @book = Book.find(params[:id]) if @book.update(book_params[:id]) redirect_to public_books_path(@book), notice: "You have updated book successfully." else render "edit" end end このように記述しました。 エラー分は ArgumentError in Public::BooksController#update When assigning attributes, you must pass a hash as an argument. 上記のようになりました。 お手数ですが、ご教示お願いします。
maisumakun

2021/12/07 10:22

book_paramsはどのように定義していますか?
sattaku1538

2021/12/07 11:23

プロのプログラマーに質問したところ、以下の回答が返ってきました。 修正前 def update @book = Book.find(params[:id]) if @book.update(book_params[:id]) redirect_to public_books_path(@book), notice: "You have updated book successfully." else render "edit" end end 修正後 def update @book = Book.find(params[:id]) if @book.update(book_params) redirect_to public_books_path(@book), notice: "You have updated book successfully." else render "edit" end end book_paramsの定義方法が間違えているとご教示いただきました。 Controller内のparams[:id]は投稿した内容の記号A,B,C,et..... 一方でbook_paramsは投稿内容→タイトル、写真などの内容についてを定義しているとのこと。 よって、 @book = Book.find(params[:id])で投稿の大まかな分類を定義する。 if @book.update(book_params)で@book内の詳細な記事の内容を分類をする。 →maisumakun ご回答ありがとうございました。 小職も勉強になりました。
guest

0

自己解決

def update
@book = Book.find(params[:id])
if @book.update(book_params)
redirect_to public_books_path(@book), notice: "You have updated book successfully."
else
render "edit"
end
end

book_paramsの定義方法が間違えていました。

投稿2021/12/07 11:24

sattaku1538

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問