ユーザーのフォロー機能を作成しています。
フォローボタンをクリックするとエラーが出てしまいます。
エラーコード NoMethodError (undefined method `[]' for nil:NilClass): app/controllers/relationships_controller.rb:31:in `set_user' Started POST "/relationships" for ::1 at 2019-12-23 17:59:16 +0900 Processing by RelationshipsController#create as HTML Parameters: {"authenticity_token"=>"dHHJPTPNPibarpwoozu6+rEKQiiEjMVIyudoSuLIaA/Aix9J2iLNCM3DmPjvWmNgabq/lcTYAFjJCgios8mAVw==", "follow_id"=>"3", "commit"=>"Follow"}
relationships_controller class RelationshipsController < ApplicationController before_action :set_user def create user = User.find(params[:relationship][:follow_id]) following = current_user.follow(user) if following.save flash[:success] = 'ユーザーをフォローしました' redirect_to user else flash.now[:alert] = 'ユーザーのフォローに失敗しました' redirect_to user end end def destroy user = User.find(params[:relationship][:follow_id]) following = current_user.unfollow(user) if following.destroy flash[:success] = 'ユーザーのフォローを解除しました' redirect_to user else flash.now[:alert] = 'ユーザーのフォロー解除に失敗しました' redirect_to user end end private def set_user user = User.find(params[:relationship][:follow_id]) end end
フォローフォームの部分テンプレート <% unless current_user == user %> <% if current_user.following?(user) %> <%= form_for(current_user.relationships.find_by(follow_id: user.id), html: { method: :delete }) do |f| %> <%= hidden_field_tag :follow_id, user.id %> <%= f.submit 'Unfollow', class: 'btn btn-danger btn-block' %> <% end %> <% else %> <%= form_for(current_user.relationships.build) do |f| %> <%= hidden_field_tag :follow_id, user.id %> <%= f.submit 'Follow', class: 'btn btn-primary btn-block' %> <% end %> <% end %> <% end %>
部分テンプレートのform_forの書き方が悪いのかと思ったのですが、変えてみてもうまくいきません。[:relationship]が読み取れていないようなのですが。。。
分かる人いませんか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/23 10:05