Ruby on Rails初心者です。
Ruby on Railsでログイン機能付きの本の感想を登録できるアプリケーションを作成しています。
ログインしているユーザーが投稿した本の内容を削除できるようにdestroyメソッドを実装したのですが、エラーが出ないのに削除できないという現象に陥ってしまい、詰まってしまったのでここにメモしておきます。
今回の不具合として、
・destroyアクションが効かない、destroyボタンを押すとshowページにいってしまう
・bootstrap,CSSが効かない
という2点がありました。
まずコントローラーですが、
def destroy
@book = Book.find(params[:id])
respond_to do |format|
if @book.destroy
format.html{redirect_to books_path, notice: "Book was successfully destroyed."}
format.html{render :index}
end
end
end
という感じで、コントローラーのdestroyアクションも間違っていなさそう、、
また、bootstrapも調べた通りに行ったのですが、効きません、、
エラーが出なかったことで私はここで詰まってしまったのですが、そもそもの問題に気が付きました。
それは、「application.html.erbにheadタグやbodyタグなどを入れていなかった」ことです。
これは結構致命的で、基本的にhtmlの型に合わせて裏側でプログラムが走ってくれるので、htmlタグ、headタグ、bodyタグは必ずつけないとですね。笑
そこで、下記を追記しました。
<!DOCTYPE html>
<html>
<head>
<title>Bookers</title>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
(中略)
</body>
</html>
これを追記すると、destroyもbootstrapもきちんと動きました。超単純だった、、笑
エラーが出ないとどこが間違っているのか分かりにくいですが、意外と根本のところにミスがあったりするんですね笑
とても勉強になりました。
ちなみに、application.html.erb以外のviewファイルを読み込むためには、読み込みたい場所に
<%= yield %>
を入れなければなりません。
私は初めこれを記述していなくて、なんでヘッダーしか表示されないんだよ!!!
と、ますます混乱したので(ド初心者)、忘れないように気を付けます笑