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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

762閲覧

フォローの非同期化実装について

dodekamin.taro

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/07/23 04:13

編集2021/07/23 08:44

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
rials on ruby にてPF作成中で
PFでフォロー・フォロワー機能の非同期通信化を実装したいです。
拙い情報で恐縮ではございますが、ご教示のほど宜しくお願い致します。

■非同期通信機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

article一覧からarticle詳細ページへ遷移する際に以下のエラーメッセージが出ます。

エラーメッセージ

NoMethodError in Articles#show
undefined method `id' for nil:NilClass
イメージ説明

該当のソースコード

ソースコード

user.rb

ruby

1コードclass User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 has_many :articles 8 has_many :favorites, dependent: :destroy 9 attachment :profile_image, destroy: false 10 11 validates :name, length: { minimum: 2, maximum: 20 }, uniqueness: true 12 validates :profile, length: { maximum: 200 } 13 14 has_many :followed_relationships, foreign_key: "follower_id", class_name: "Relationship", dependent: :destroy 15 has_many :followed, through: :followed_relationships 16 has_many :follower_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy 17 has_many :followers, through: :follower_relationships 18 19 #フォローしているかを確認するメソッド 20 def followed?(user) 21 followed_relationships.find_by(followed_id: user.id) 22 end 23 24 #フォローするときのメソッド 25 def follow(user) 26 followed_relationships.create!(followed_id: user.id) 27 end 28 29 #フォローを外すときのメソッド 30 def unfollow(user) 31 followed_relationships.find_by(followed_id: user.id).destroy 32 end 33 34 35end 36

users_controller.rb

ruby

1コードclass UsersController < ApplicationController 2 3 before_action :authenticate_user! 4 before_action :ensure_correct_user, only: [:edit, :update] 5 6 def show 7 @user = User.find(params[:id]) 8 @articles = @user.articles 9 # @article = Article.new 10 end 11 12 def index 13 @users = User.all 14 end 15 16 def edit 17 @user = User.find(params[:id]) 18 end 19 20 def update 21 @user = User.find(params[:id]) 22 if @user.update(user_params) 23 redirect_to user_path(@user), notice: "更新しました!" 24 else 25 render "edit" 26 end 27 end 28 29 def followed 30 #@userがフォローしているユーザー 31 @user = User.find(params[:id]) 32 @users = @user.followed 33 render template: "relationships/followed" 34 end 35 36 def followers 37 #@userをフォローしているユーザー 38 @user = User.find(params[:id]) 39 @users = @user.followers 40 render template: "relationships/follower" 41 end 42 43 private 44 45 def user_params 46 params.require(:user).permit(:name, :profile, :profile_image) 47 end 48 49 def ensure_correct_user 50 @user = User.find(params[:id]) 51 unless @user == current_user 52 redirect_to user_path(current_user) 53 end 54 end 55 56end

_info.html.erb

html

1コード<table class='table'> 2 <tr><%= attachment_image_tag user, :profile_image, :fill, 100, 100, fallback: "no-image-icon.jpg", class:"mt-3 rounded-circle"; %></tr> 3 <tr> 4 <th><%= user.name %></th> 5 </tr> 6 <tr> 7 <th><%= user.profile %></th> 8 </tr> 9 <tr> 10 <th>follows</th> 11 <th class="follower"> 12 <%= link_to followers_user_path(user.id) do %> 13 <h5 style="color: black;"><%= user.followers.count %></h5> 14 <% end %> 15 </th> 16 </tr> 17 <tr> 18 <th>followers</th> 19 <th class="follow"> 20 <%= link_to followed_user_path(user.id) do %> 21 <h5 style="color: black;"><%= user.followed.count %></h5> 22 <% end %> 23 </div> 24 </tr> 25 <tr> 26 <th> 27 <% if user_signed_in? && @user != current_user %> 28 <div id="follow_form"> 29 <% if current_user.followed?(@user) %> 30 <%= render "users/unfollow" %> 31 <% else %> 32 <%= render "users/follow" %> 33 <% end %> 34 </div> 35 <% end %> 36 </th> 37 </tr> 38</table> 39 40<div class='row'> 41 <%= link_to '',edit_user_path(user),class: "btn btn-outline-secondary btn-block fas fa-user-cog edit_user_#{user.id}" %> 42</div>

_

_index.htm.erb

html

1コード<div class="card-list-containar py-5"> 2 <% @articles.each do |article| %> 3 <div class="card w-50 mx-auto mt-4 shadow-lg"> 4 <%= link_to article_path(article.id) do %> 5 <%= attachment_image_tag article, :image, class:"card-img-top"; %> 6 <% end %> 7 <div class="card-body"> 8 <div class="row"> 9 <div class="col-2"> 10 <%= attachment_image_tag article.user, :profile_image, :fill, 60, 60, fallback: "no-image-icon.jpg", class:"mt-3 rounded-circle"; %> 11 </div> 12 <div class="col-10"> 13 <p class="card-title"> 14 <%= link_to(article_path(article.id), class:"text-dark") do %> 15 <strong><i class="far fa-flag"></i><span> <%= article.title %></span></strong> 16 <% end %> 17 </P> 18 <p class="card-text">本文:<%= article.body.truncate(30) %></p> 19 <span><i class="fas fa-user"></i> By <%=link_to article.user.name %> | </span> 20 <span><i class ="favorite_btn_<%= article.id %>"><%= render "favorites/favorite-btn", article: article %></i></span> 21 </div> 22 </div> 23 </div> 24 </div> 25 <% end %> 26 <!--%= paginate post_images %>--> 27</div> 28

relationship.rb

ruby

1コードclass Relationship < ApplicationRecord 2 3 #自分をフォローしているユーザー 4 belongs_to :follower, class_name: "User" 5 #自分がフォローしているユーザー 6 belongs_to :followed, class_name: "User" 7 #バリデーション 8 validates :follower_id, presence: true 9 validates :followed_id, presence: true 10 11end

relationships_controller.rb

ruby

1コードclass RelationshipsController < ApplicationController 2 3 4 # フォローする 5 def create 6 @user = User.find(params[:followed_id]) 7 current_user.follow(@user) 8 end 9 10 # アンフォローする 11 def destroy 12 @user = User.find(params[:id]) 13 current_user.unfollow(@user) 14 end 15 16end 17

試したこと

フォローの非同期化は以下の記事を参考に作成しております。
https://qiita.com/yuto_1014/items/8d508b84fd0c2316ba01

スペルミスがないかはくまなく探しました。
またhttps://qiita.com/yuto_1014/items/8d508b84fd0c2316ba01
の記事を参照にしました。

補足情報(FW/ツールのバージョンなど)

Rails 5.2.6
ruby 2.6.3p62
開発環境 AWS clooud9

ここにより詳細な情報を記載してください。

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

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

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

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

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

odataiki

2021/07/23 07:38

ソースコードは画像ではなく、テキストで <code> (コードの挿入)を使って書く方が よりたくさん回答が得られると思います。 画像の場合、検証しようにもいちいち全部手入力するのが相当手間な為です。
dodekamin.taro

2021/07/23 08:45

@odataiki様 ご指摘ありがとうございます! コード挿入に変更してみました!
guest

回答1

0

userの情報はちゃんと受け取れているか中身を確認してください。

投稿2021/07/26 02:48

J_O

総合スコア143

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問