2
0

More than 3 years have passed since last update.

Railsでbootstrapが効かない、destroyが効かない

Posted at

Ruby on Rails初心者です。

Ruby on Railsでログイン機能付きの本の感想を登録できるアプリケーションを作成しています。

ログインしているユーザーが投稿した本の内容を削除できるようにdestroyメソッドを実装したのですが、エラーが出ないのに削除できないという現象に陥ってしまい、詰まってしまったのでここにメモしておきます。

今回の不具合として、
・destroyアクションが効かない、destroyボタンを押すとshowページにいってしまう
・bootstrap,CSSが効かない
という2点がありました。

まずコントローラーですが、

books_controller.rb
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タグは必ずつけないとですね。笑

そこで、下記を追記しました。

application.html
<!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ファイルを読み込むためには、読み込みたい場所に

application.html
<%= yield %>

を入れなければなりません。

私は初めこれを記述していなくて、なんでヘッダーしか表示されないんだよ!!!
と、ますます混乱したので(ド初心者)、忘れないように気を付けます笑

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0