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

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

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

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

Ruby on Rails

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

0回答

1288閲覧

Rails フォロー機能を非同期にしたい

75ks

総合スコア4

Ruby

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

Ruby on Rails

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

1クリップ

投稿2020/09/11 03:48

railsでSNSのようなアプリを開発していて、フォロー機能を実装しました。
これを非同期通信に変更したいです。

部分テンプレートのfollowform_forlink_toに変更して、remote: trueを設定しましたが、上手くいきませんでした。

######現在のコードはこちらです。

routes

1resources :relationships, only: [:create, :destroy]

html

1<div class="follow" id="follow"> 2 <%= render partial: "shared/follow", locals: {user: @user} %> 3</div>

follow

1<% unless current_user == @user %> 2 <% if current_user.following?(@user) %> 3 <%= form_for(current_user.relationships.find_by(follow_id: @user.id), html: { method: :delete }) do |f| %> 4 <%= hidden_field_tag :follow_id, @user.id %> 5 <%= f.submit 'アンフォロー', class: 'btn follow-btn' %> 6 <% end %> 7 <% else %> 8 <%= form_for(current_user.relationships.build) do |f| %> 9 <%= hidden_field_tag :follow_id, @user.id %> 10 <%= f.submit 'フォロー', class: 'btn anfollow-btn' %> 11 <% end %> 12 <% end %> 13<% end %>

controller

1class RelationshipsController < ApplicationController 2 before_action :set_user 3 4 def create 5 following = current_user.follow(@user) 6 if following.save 7 flash[:notice] = 'ユーザーをフォローしました' 8 redirect_to @user 9 else 10 flash.now[:alert] = 'ユーザーのフォローに失敗しました' 11 redirect_to @user 12 end 13 end 14 15 def destroy 16 following = current_user.unfollow(@user) 17 if following.destroy 18 flash[:notice] = 'ユーザーのフォローを解除しました' 19 redirect_to @user 20 else 21 flash.now[:alert] = 'ユーザーのフォロー解除に失敗しました' 22 redirect_to @user 23 end 24 end 25 26 private 27 28 def set_user 29 @user = User.find(params[:follow_id]) 30 end 31end 32

relationshipmodel

1class Relationship < ApplicationRecord 2 belongs_to :user 3 belongs_to :follow, class_name: 'User' 4 5 validates :user_id, presence: true 6 validates :follow_id, presence: true 7end
class User < ApplicationRecord -----------------------------省略--------------------------------- def follow(other_user) unless self == other_user self.relationships.find_or_create_by(follow_id: other_user.id) end end def unfollow(other_user) relationship = self.relationships.find_by(follow_id: other_user.id) relationship.destroy if relationship end def following?(other_user) self.followings.include?(other_user) end end

db

1class CreateRelationships < ActiveRecord::Migration[6.0] 2 def change 3 create_table :relationships do |t| 4 t.references :user, foreign_key: true 5 t.references :follow, foreign_key: { to_table: :users } 6 t.timestamps 7 t.index [:user_id, :follow_id], unique: true 8 end 9 end 10end 11

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

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

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

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

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

no1knows

2020/09/11 11:23

フォロー機能までは期待通りにうごいているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問