Twitterクローンの投稿にいいね機能を実装させたいのですが、以下のuserモデルのselfの部分で「そんなメソッドはない」とエラーが出てしまったのですが、selfにはcurrent_userが入るようにしているつもりです。
#userモデル class User < ApplicationRecord before_save { self.email.downcase! } validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, length: { maximum: 255 }, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i }, uniqueness: { case_sensitive: false } has_secure_password has_many :microposts has_many :relationships has_many :followings, through: :relationships, source: :follow has_many :reverses_of_relationship, class_name: 'Relationship', foreign_key: 'follow_id' has_many :followers, through: :reverses_of_relationship, source: :user has_many :favorites has_many :favorites, through: :favorites, source: :micropost def follow(other_user) unless self == other_user self.relationships.find_or_create_by(follow_id: other_user.id) end end def unfollow(other_user) relationship = self.relationships.find_by(follow_id: other_user.id) relationship.destroy if relationship end def following?(other_user) self.followings.include?(other_user) end def feed_microposts Micropost.where(user_id: self.following_ids + [self.id]) end #いいね機能↓ =begin def like(micropost) self.favorites.find_or_create_by(micropost_id: micropost.id) end def unlike(micropost) favorite = self.favorites.find_by(micropost_id: micropost.id) favorite.destroy if favorite end =end def already_favorite?(micropost) self.favorites.exists?(micropost_id: micropost.id) end end
# favoriteコントローラー class FavoritesController < ApplicationController before_action :require_user_logged_in def create @favorite = current_user.favorites.create(micropost_id :params[:micropost_id]) flash[:success] = 'いいねしました。' redirect_back(fallback_location: root_path) end =begin user = User.find(params[:micropostw_id]) current_user.like(micropost) flash[:success] = 'いいねしました。' redirect_to user # redirect_back(fallback_location: root_path) =end def destroy @micropost = Micropost.find(params[:micropost_id ]) @favorite = current_user.favorites.find_by(micropost_id :@micropost) @favorite.destroy flash[:success] = 'いいねを外しました。' redirect_back(fallback_location: root_path) =begin user = User.find(params[:micropost_id]) current_user.unlike(micropost) flash[:success] = 'いいねを外しました。' redirect_to user # redirect_back(fallback_location: root_path) =end end end
パーシャルとして違うファイルで呼び出す。
<% if current_user.already_favorite?(micropost) %>
<%= link_to 'いいねを外す', favorite_path(micropost),method: :delete %>
<% else %>
<%= link_to 'いいねする', favorites_path, method: :post %>
<% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/27 01:57
2020/12/27 02:40
2020/12/27 03:46