ユーザーのフォロー機能を実装しています。
フォローのボタンを押すとエラーになります。。。。。
エラー
undefined method `[]' for nil:NilClass def set_user @user = User.find(params[:relationship][:follow_id]) end end >> (params[:relationship][:follow_id]) NoMethodError: undefined method `[]' for nil:NilClass >> (params[:follow_id]) => "#<User::ActiveRecord_Relation:0x00007fea4b88ea18>" >> (params[:relationship]) => nil >>
relationshipコントローラー
class RelationshipsController < ApplicationController before_action :set_user, only: [:create, :destroy] def create following = current_user.follow(@user) if following.save flash[:success] = 'ユーザーをフォローしました' redirect_to @user else flash.now[:alert] = 'ユーザーのフォローに失敗しました' redirect_to @user end end def destroy 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
relationshipビュー
<% unless current_user == @users %> <% if current_user.following?(@users) %> <%= form_for(current_user.relationships.find_by(follow_id: @users), html: { method: :delete }) do |f| %> <%= hidden_field_tag :follow_id, @users %> <%= f.submit 'Unfollow', class: 'btn btn-danger btn-block' %> <% end %> <% else %> <%= form_for(current_user.relationships.build) do |f| %> <%= f.hidden_field :follow_id :follow_id, @users %> <%= f.submit 'Follow', class: 'btn btn-primary btn-block' %> <% end %> <% end %> <% end %>
paramsがrelationshipが空で
follow_idがアクティブレコードのエラーみたいですが、
原因がわかりません。。。。
どなたか助けてください。。。。。。。
ずっと突っ込もうと思ってたのだけど、Railsのバージョンは5ですか?
質問者さんがお手本にされている情報が5での実装のはずなので、
もし6でやられている場合は5から6へ移行するために、
5では使われていたけど6だと使えない記述とかを直していく必要があるかと思います。
とりあえず、バージョン情報を質問に追記していただけますでしょうか。
バージョンは6です!!
> バージョンは6です!!
そこだっ!!
質問者さんが参考にしている情報は5で実装したものと記載されているので、
6にそのまま当てはめようとしてもどこかでエラーが出ると思う。
参考にされた元記事を6で作り直した情報とかピンポイントで見つけるのはたぶん難しいので、
「rails5の記事を元に6で実装しようとしている」ということを質問に追記するか、
Rails5を別に環境作って試してみるか、どちらかかなぁと。
回答1件
あなたの回答
tips
プレビュー