前提・実現したいこと
現在、Rails6でインスタクローンアプリを作成しています。
今はいいね機能の実装中です。
以下のページを参考に、いいねボタンを押すとページの再読み込みなしで
1 いいねボタンの色が変わり
2 いいね数が1増える
描画をしたいと考えています。
発生している問題・エラーメッセージ
画面上エラーメッセージは表示されませんが、googleのデベロッパーツールを見ると以下のエラーが表示されていました。
1つ目
Uncaught Error: Cannot find module 'bootstrap' at webpackMissingModule (application.js:10) at Object../app/javascript/packs/application.js(application.js:10) at _webpack_require_(bootstrap:19) at bootstrap:83 at bootstrap:83
2つ目
Uncaught ReferenceError: $ is not defined at <anonymous>:1:1 at processResponse(rails-ujs.js:283) at rails-ujs.js:196 at XMLHttpRequest.xhr.onreadystatechange(rails-ujs.js:264)
該当のソースコード
_like.html.erb
_
1<% if !current_user?(micropost.user) %> 2 <span class="like"> 3 <% if micropost.make_like?(current_user) %> 4 <%= form_for(micropost.likes.find_by(user_id: current_user.id), method: :delete, remote: true) do |f| %> 5 <%= button_tag(class: "btn btn-default btn-xs") do %> 6 <i class="fas fa-heart unlike-btn"></i> 7 <%= content_tag :span, "#{micropost.likes_count}" %> 8 <% end %> 9 <% end %> 10 <% else %> 11 <%= form_for(micropost.likes.build, remote: true) do |f| %> 12 <div><%= hidden_field_tag :micropost_id, micropost.id %></div> 13 <%= button_tag(class: "btn btn-default btn-xs") do %> 14 <i class="far fa-heart like-btn" ></i> 15 <%= content_tag :span, "#{micropost.likes_count}" %> 16 <% end %> 17 <% end %> 18 <% end %> 19 </span> 20<% end %>
_micropost.html.erb
<li id="micropost-<%= micropost.id %>" data-micropost-id="<%= micropost.id %>"> <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> <%= link_to micropost.user.name, micropost.user %> <span class="content"> <%= micropost.content %> <%= image_tag micropost.picture.url if micropost.picture? %> </span> <%= render 'likes/like', micropost: micropost %> <span class="timestamp"> <%= time_ago_in_words(micropost.created_at) %>前に投稿 <% if current_user?(micropost.user) %> <%= link_to "削除", micropost, method: :delete, data: { confirm: "削除してもよろしいですか?" } %> <% end %> </span> </li>
likes_controller.rb
rb
1class LikesController < ApplicationController 2 before_action :logged_in_user 3 4 def create 5 @micropost = Micropost.find(params[:micropost_id]) 6 unless @micropost.make_like?(current_user) 7 @micropost.make_like(current_user) 8 @micropost.reload 9 respond_to do |format| 10 format.html { redirect_to request.referrer || root_url } 11 format.js 12 end 13 end 14 end 15 16 def destroy 17 @micropost = Like.find(params[:id]).micropost 18 if @micropost.make_like?(current_user) 19 @micropost.remove_like(current_user) 20 @micropost.reload 21 respond_to do |format| 22 format.html { redirect_to request.referrer || root_url } 23 format.js 24 end 25 end 26 end 27end
micropost.rb
rb
1class Micropost < ApplicationRecord 2 belongs_to :user 3 has_many :likes, dependent: :destroy 4 has_many :make_like_users, through: :likes, source: :user 5 default_scope -> { order(created_at: :desc) } 6 mount_uploader :picture, PictureUploader 7 validates :user_id, presence: true 8 validates :content, presence: true, length: { maximum: 200 } 9 validates :picture, presence: true 10 validate :picture_size 11 12 def make_like(user) 13 likes.create(user_id: user.id) 14 end 15 16 def remove_like(user) 17 likes.find_by(user_id: user.id).destroy 18 end 19 20 def make_like?(user) 21 make_like_users.include?(user) 22 end 23 24 private 25 26 def picture_size 27 if picture.size > 5.megabytes 28 errors.add(:picture, "画像サイズを5MB以下にしてください") 29 end 30 end 31end
gemfile
1source 'https://rubygems.org' 2git_source(:github) { |repo| "https://github.com/#{repo}.git" } 3 4ruby '2.6.3' 5gem 'rails', '~> 6.0.2', '>= 6.0.2.1' 6gem 'bcrypt' 7gem 'faker' 8gem 'carrierwave' 9gem 'mini_magick' 10gem 'will_paginate' 11gem 'bootstrap-will_paginate' 12gem 'puma', '~> 4.1' 13gem 'bootstrap-sass' 14gem 'sass-rails', '>= 6' 15gem 'bootstrap' 16gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 17gem 'webpacker', '~> 4.0' 18gem 'turbolinks', '~> 5' 19gem 'jbuilder', '~> 2.7' 20gem 'bootsnap', '>= 1.4.2', require: false 21gem 'rails-i18n' 22gem 'font-awesome-sass' 23gem 'counter_culture' 24 25group :development, :test do 26 gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] 27 gem 'rspec-rails' 28 gem 'sqlite3', '~> 1.4', require: false 29 gem 'factory_bot_rails' 30end 31 32group :development do 33 gem 'web-console', '>= 3.3.0' 34 gem 'listen', '>= 3.0.5', '< 3.2' 35 gem 'spring' 36 gem 'spring-watcher-listen', '~> 2.0.0' 37end 38 39group :production do 40 gem 'pg' 41 gem 'fog' 42end
routes.rb
rb
1Rails.application.routes.draw do 2 get 'likes/create' 3 get 'likes/destroy' 4 get 'sessions/new' 5 root 'main_page#main' 6 get '/signup', to: 'users#new' 7 get '/login', to: 'sessions#new' 8 post '/login', to: 'sessions#create' 9 delete '/logout', to: 'sessions#destroy' 10 get '/newpost', to: 'microposts#new' 11 resources :users do 12 member do 13 get :following, :followers 14 end 15 end 16 resources :microposts, only: [:create, :destroy] 17 resources :relationships, only: [:create, :destroy] 18 resources :testsessions, only: :create 19 resources :likes, only: [:create, :destroy] 20end
application.js
js
1require("@rails/ujs").start() 2require("turbolinks").start() 3require("@rails/activestorage").start() 4require("channels") 5require("bootstrap") 6require("@fortawesome/fontawesome-free")
試したこと
以下のサイトの方法を参考に対応しましたが、効果は見られませんでした。
https://teratail.com/questions/207172
https://blog.piyo.tech/posts/2018-08-11-gem-with-js-on-webpacker/
補足情報(FW/ツールのバージョンなど)
関係ありそうなものを抜粋いたします。
Rails 6.0.2.1
bootstrap (4.4.1)
bootstrap-sass (3.4.1)
turbolinks (5.2.1)
turbolinks-source (5.2.0)
webpacker (4.2.2)
ご回答のほどどうぞよろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。