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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

1434閲覧

他モデル間フォローでのajax実装方法とは?

s.k

総合スコア423

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/10/20 07:33

編集2016/10/20 08:22

###前提・実現したいこと
他モデル間でのフォロー機能にajaxを実装したいです。
followの部分は実装できています。(たぶん)

###発生している問題・エラーメッセージ
unfollow(associates#destroy)でもajaxを実装しているつもりができてません。

【associates_controller】

class AssociatesController < ApplicationController before_action :logged_in_user def create @shop = Shop.find(params[:shop_id]) @associate = current_user.associates.build(shop: @shop) @associate.save redirect_to @shop end def destroy @associate = current_user.associates.find_by!(shop_id: params[:shop_id]) @associate.destroy redirect_to @shop end end

↑destroyのredirected_toが反応していないような気が…

【associates/_associate_links】

<div id="follow_form"> <% if @shop.associated_by? current_user %> <%= link_to 'unfollow', shop_associates_path(@shop.id), method: :delete, remote: true %> <% else %> <%= link_to 'follow', shop_associates_path(@shop.id), method: :post, remote: true %> <% end %> </div>

【associates/create.js.erb】

$('#follow_form').html('<%= escape_javascript(render("associates/associate_links")) %>');

【associates/destroy.js.erb】

$('#follow_form').html('<%= escape_javascript(render("associates/associate_links")) %>');

ちなみにリンクはshowページに貼ってあります。

【shops/show】

<% if user_signed_in? %> <%= render 'associates/associate_links'%> <% end %>

###補足情報(言語/FW/ツール等のバージョンなど)
ShopとUser間におけるフォロー機能になっています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ruby

1 def destroy 2 @associate = current_user.associates.find_by!(shop_id: params[:shop_id]) 3 @associate.destroy 4 redirect_to @shop 5 end

ここの@shopが定義されていないので、上で定義するか、

ruby

1redirect_to Shop.find(params[:shop_id])

のようにすると良いと思います。

投稿2016/10/20 09:25

cameluby

総合スコア891

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

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

s.k

2016/10/20 12:32

できました! redirect_to Shop.find(params[:shop_id]) で解決しました。 変数の使い方が曖昧なので、勉強します。 camelubyさん、すごいですね。何者ですか。。。 知識もそうですが、一番親身になって答えてくれて感激です。 ぜひ、今後ともよろしくお願いします。
cameluby

2016/10/20 12:43

解決したようで良かったです! 普通の変数ならエラーにしてくれて気付きやすいのですが、インスタンス変数(@から始まる変数です)は定義していなくてもnilが返るので、最初は一見気付きにくいですよね。。。 また気軽に質問してください!
s.k

2016/10/20 12:57

はーい!
guest

0

↑destroyのredirected_toが反応していないような気が…

たぶん逆で redirect_to が効くので associates/destroy.js.erb が render されてないはずです。

投稿2016/10/20 07:37

hana-da

総合スコア1728

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

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

s.k

2016/10/20 08:06

redirected_toを消せば反応するという感じでしょうか?? 一応、消して試してみましたが、unfollowが反応しません((+_+))
hana-da

2016/10/20 09:33

ごめんなさい「unfollowが反応」がどういう事を示すのかよくわかりません。
s.k

2016/10/20 12:26

ajaxの機能が実装されている(表示がunfollow→followに変わる)という意味です! 抽象的ですいません。以後、気を付けます! お早い解答ありがとうございます!助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問