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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

8834閲覧

param is missing or the value is emptyのエラーを解決したい。

Hedgehog9

総合スコア11

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/11/03 04:28

Ruby on Railsで簡単な本の管理アプリを作っています。
category>bookのような構造になっていて、ルーティングはネストしてあります。
本の削除機能を実装し,削除しようとしたところ、エラーが発生しました。
ご回答よろしくお願いします。
##エラー文(*の部分でエラーが起きています。)

ActionController::ParameterMissing in BooksController#destroy param is missing or the value is empty: book Extracted source (around line #31): 29 30 def book_params 31 ** params.require(:book).permit(:content, :image).merge(user_id: current_user.id)** 32 end 33 end

##book_controller

class BooksController < ApplicationController def index @categorys = Category.all @book = Book.new @category = Category.find(params[:category_id]) @books = @category.books.includes(:user) end def create @categorys = Category.all @category = Category.find(params[:category_id]) @book = @category.books.new(book_params) if @book.save redirect_to category_books_path(@category) else @books = @category.books.includes(:user) render :index end end def destroy @categorys = Category.all @category = Category.find(params[:category_id]) @book = @category.books.find(book_params) end private def book_params params.require(:book).permit(:content, :image).merge(user_id: current_user.id) end end

##main_book.html.erb

<div class="book-header">   <div class="left-header"> <div class="header-title"> <%= @category.name %> </div> </div> <div class="right-header"> <div class="header-button"> <%= link_to "カテゴリーを削除する", category_path(@category), method: :delete %> </div> </div> </div> <%= form_with model: [@category, @book], class: 'form', local: true do |f| %> <div class="form-input"> <%= f.text_field :content, class: 'form-title', placeholder: 'type a title' %> <label class="form-image"> <span class="image-file">画像</span> <%= f.file_field :image, class: 'hidden' %> </label> </div> <%= f.submit '送信', class: 'form-submit' %> <% end %> <div class="book-main"> <%= render partial: 'book', collection: @books %> </div>

##book.html.erb

<div class="book-status"> <div class="upper-book"> <div class="book-date"> <%= l book.created_at %> </div> </div> <div class="lower-book"> <div class="book-content"> <%= book.content %> </div> <%= image_tag book.image.variant(resize: '250x600'), class: 'book-image' if book.image.attached? %> <div class="book-delete-button"> <%= link_to "削除", category_book_path(@category.id, book.id), method: :delete %> </div> </div> </div>

##試したこと
book_controllerのdeleteアクション内の@categoryと@bookの間にbinding.pryをしてparamsを確認したところ

=> <ActionController::Parameters {"_method"=>"delete", "authenticity_token"=>"Or+CftXzsB5iq38KzO5EePqdL5VWOtBr9E82xYtwTaG1uj1izsrKrT1bTVWJPtGOeqEL4QtySWCy5Pn++fVv3g==", "controller"=>"books", "action"=>"destroy", "category_id"=>"27", "id"=>"48"} permitted: false>

となっていました。
また、book_oaramsのrequire(:book)がいらないかもという記事がありましたが解決しませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1 def destroy 2 category = Category.find(params[:category_id]) 3 book = category.books.find(params[:id]) 4 book.destroy if book.user_id == current_user.id 5 end

的な感じですかね
設計どうなってんのかわからんが実はcategoryが不要で

ruby

1book = Book.find(params[:id])

で充分かもしれない

投稿2020/11/03 04:41

asm

総合スコア15149

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

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

Hedgehog9

2020/11/03 05:11

返信ありがとうございます。 無事消すことができました!ありがとうございます! 質問なのですが、削除するだけなので、インスタンス変数にする必要はなかったということなのでしょうか?
asm

2020/11/03 05:57

そうですね。 Viewで表示する必要がないのでローカル変数にしています。
Hedgehog9

2020/11/03 06:34

なるほど!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問