前提
パーシャルファイル内でインスタンス変数を使用していたが、インスタンス変数は使用しない方がいいとのご指摘を受け、ローカルを削除したところ、エラーになったため調べたところ、呼び出し側で「local」を指定する必要があるという記事を見つけ、その記述方法を教えて頂ければ幸いでございます。
発生している問題・エラーメッセージ
app/views/relationships/_follow_button.html.erb(変更前)
1<% if current_user.following?(user) %> 2 <%= form_with model: @relationship, url: relationship_path, method: :delete, local: true do |f| %> 3 省略 4 <%= form_with model: @set_relationship, url: relationships_path, local: true do |f| %> 5 省略
該当のソースコード
app/views/relationships/_follow_button.html.erb(変更後)
1<% if current_user.following?(user) %> 2 <%= form_with model: relationship, url: relationship_path, method: :delete, local: true do |f| %> 3 省略 4 <%= form_with model: set_relationship, url: relationships_path, local: true do |f| %> 5 省略 6
app/views/events/show.html.erb(パーシャルファイル指定箇所)
1<div class="d-flex align-items-center gap-3 mb-3"> 2 <%= image_tag @event.user.decorate.avatar, class: 'rounded-circle avatar-lg' %> 3 <%= link_to @event.user.name, user_path, class: 'nav-link' %> 4 <ul class="list-unstyled"> 5 ** <%= render 'relationships/follow_button' %> ** 6 </ul> 7</div>
app/controllers/relationships_controller.rb
1class RelationshipsController < ApplicationController 2 before_action :set_user, only: [:create, :destroy] 3 4 def create 5 following = current_user.follow(@user) 6 if following.save 7 flash[:success] = "ユーザーをフォローしました" 8 redirect_to user_path 9 else 10 flash.now[:alert] = "ユーザーのフォローに失敗しました" 11 redirect_to user_path 12 end 13 end 14 15 def destroy 16 following = current_user.unfollow(@user) 17 if following.destroy 18 flash[:success] = "ユーザーのフォローを解除しました" 19 redirect_to user_path 20 else 21 flash.now[:alert] = "ユーザーのフォロー解除に失敗しました" 22 redirect_to user_path 23 end 24 end 25 26 private 27 28 def set_user 29 @user = User.find(params[:relationship][:follow_id]) 30 end 31 32end
試したこと
お手数をお掛けしますが、ご指導のほどお願い致します。
回答1件