Open1
docker+rails+postgresqlでいいね機能追加
DBにテーブル作成
docker-compose run web rails g model Like user_id:integer post_id:integer
docker-compose run web rails db:migrate
schema.rbに更新されたことを確認
schema.rb
create_table "likes", force: :cascade do |t|
t.integer "user_id"
t.integer "post_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
あっ。カラム名間違えてました。
docker-compose run web rails g migration rename_post_id_column_to_like
20230203051916_rename_post_id_column_to_likes.rb
class RenamePostIdColumnToLikes < ActiveRecord::Migration[7.0]
def change
rename_column :likes, :post_id, :tweet_id
end
end
migrateして再起動
docker-compose run web rails db:migrate
docker-compose up
バリデーション追加
like.rb
class Like < ApplicationRecord
validates :user_id, {presence: true}
validates :tweet_id, {presence: true}
end
カラムの名前と型間違えていたのでこちらで修正↓
ルートを作成
routes.rb
#いいね
post '/likes/:tweet_id/create', to: 'likes#create'
delete '/likes/:tweet_id/destroy', to: 'likes#destroy'
index.html.slim
= render partial: 'form', locals: { tweet: @tweet }
.tweet_index
- @tweets.each do | tweet |
.tweet_box
- @tweets_user = User.find_by(id: tweet.user_id)
.img_box
= image_tag @tweets_user.image , :style => 'max-height: 80px; max-width: 100px' if @tweets_user.image.attached?
.arrow_box
= tweet.content
.child_flam
- if Like.find_by(user_id: @current_user.id, tweet_id: tweet.id)
= link_to "/likes/#{tweet.id}/destroy", method: :delete do
span.heart
- else
= link_to "/likes/#{tweet.id}/create", method: :post do
span.heart_no
.child_flam
- if @current_user.id == tweet.user_id.to_i
= link_to '削除', tweet, method: :delete, data: { confirm: "つぶやきを削除します。よろしいですか?"} ,class: 'btn-delete'
= tweet.created_at
likes_controller.rb
class LikesController < ApplicationController
before_action :current_user
def create
@tweet_id = params[:tweet_id]
@like = Like.new(user_id: @current_user.id ,tweet_id: params[:tweet_id])
if @like.save
redirect_to tweets_path, notice: "いいねしました"
end
end
def destroy
@like = Like.find_by(user_id: @current_user.id, tweet_id: params[:tweet_id])
if @like.destroy
redirect_to tweets_path, notice: "いいね消しました"
end
end
end
以上で画面動きました。