質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

3回答

890閲覧

[エラー]NoMethodError in FollowsController#destroy  undefined method `destroy' for nil:NilClass

YutoKubo

総合スコア13

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/12/09 07:30

編集2020/12/09 07:31

フォロー機能を作成している最中なので、'フォローする','フォローを外す'ボタンをif文で表示させるようにしています。
しかし、フォローはできてもフォローを外すボタンを押したとたんにエラーが表示されました。
ちなみに、非同期ではありません。
まだ課題の言語化が下手くそですがお力添えをいただければと思います。
イメージ説明

< follows_controller.rb>

class FollowsController < ApplicationController def create @follow = current_user.follows.create(community_id:params[:community_id]) redirect_back(fallback_location: root_path) end def destroy @community = Community.find(params[:community_id]) @follow = current_user.follows.find_by(community_id: :@community_id) @follow.destroy redirect_back(fallback_location: root_path) end end

<index.html.erb>

<div class="container"> <div class="row"> <% @communities.each do |community| %> <div class="col-3"> <%= link_to community_path(community) do %> <div class="card" style="width: 14rem;"> <div class="card-image"> <%= attachment_image_tag community, :intro_image, fallback:"no-image.jpg", class:"rounded-top" %> </div> <div class="card-body"> <%= community.title %> </div> <% if current_user.present? && current_user.following?(community) %> <%= link_to 'フォローを外す', community_follows_path(community), method: :destroy %> <% else %> <%= link_to 'フォロー', community_follows_path(community), method: :post %> <%end%> <%= community.follows.count %> </div> <%end%> </div>   <%end%> </div> </div>

<routes.rb>

Rails.application.routes.draw do devise_for :users # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html root to: "communities#index" resources :users resources :communities do resource :follows, only: [:create, :destroy] end resources :mypage, only: [:profile] do member do get 'profile' get 'posted_community' get 'followed_community' end end end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

<%= link_to 'フォローを外す', community_follows_path(community), method: :destroy %>
ではなく、正しくは
<%= link_to 'フォローを外す', community_follows_path(community), method: :delete %>
でした。
link_toのmethodの部分は4つのhttpメソッドの中から選択する必要があります。

投稿2020/12/19 02:06

YutoKubo

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

恐らくですが、

@follow = current_user.follows.find_by(community_id: :@community_id)

@follow = current_user.follows.find_by(community_id: :@community.id)

の間違いではないでしょうか?
何れにせよ、書かれているコードの中では
@community_id
はどこにも定義されていないように思います。

如何でしょうか?

投稿2020/12/09 07:43

tomtomtomtom

総合スコア563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YutoKubo

2020/12/09 08:29

コードのミスのご指摘ありがとうございます。 あと、無知を憚らず聞かせていただきますが、@community_idが定義されていないとはどういうことですか?
tomtomtomtom

2020/12/09 09:50

@community_id=〇〇 などが無いということです。 @communityはあるので、@community.idではないかなと、、、
YutoKubo

2020/12/19 02:07 編集

ご回答ありがとうございました( ͡° ͜ʖ ͡°)。
guest

0

@followが空みたいです...

投稿2020/12/09 07:41

YutoKubo

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問