###前提・実現したいこと
他モデル間でのいいね!機能にajaxを実装したい。
二度目のajaxの質問で大変恐縮です。
いいね!をするまでの流れとしては
Userログイン→Shopindexページ→Shopshowページ→Shopユーザーの投稿のいいね!リンクを押す
→ajax発動!
を予定しています。
###発生している問題・エラーメッセージ
いいね!機能のコントローラーである、goods_controller.rb中のcreateメソッド・destroyメソッドのredirect_to Shop.find(params[:id])が作動しません。
→いいね!リンクを押しても更新ボタンを押さない限り表示がいいね!を取り消すに切り替わりません。
【goods_controller.rb】
class GoodsController < ApplicationController before_action :logged_in_user def create @micropost = Micropost.find(params[:micropost_id]) @good = current_user.goods.build(micropost_id: @micropost.id) @good.save end def destroy @good = current_user.goods.find_by!(micropost_id: params[:micropost_id]) @good.destroy end end
@goodデータはコンソールで確認しましたところ、
格納されています。
[2] pry(main)> Good.first Good Load (1.1ms) SELECT "goods".* FROM "goods" ORDER BY "goods"."id" ASC LIMIT 1 => #<Good:0x00000004fa17f8 id: 20, user_id: 2, shop_id: nil, created_at: Fri, 21 Oct 2016 07:17:03 UTC +00:00, updated_at: Fri, 21 Oct 2016 07:17:03 UTC +00:00, micropost_id: 2>
※shop_idはまちがえて作ってしまいました。
ですので、私はcreateメソッドdestroyメソッドの引数に問題があるのではないかと思います。
※更新するといいね!→いいね!を取り消す、いいね!を取り消す→いいね!と表示が切り替わります。
【create.js.erb】
$('#follow_form').html('<%= escape_javascript(render("goods/good_links")) %>');
【destroy.js.erb】
$('#follow_form').html('<%= escape_javascript(render("microposts/micropost")) %>');
【micropost/_micropost.html.erb】
<li id="micropost-<%= micropost.id %>"> <!-- User ver--> <% if @page == 2 || @account == 3 %> <!-- ユーザーアイコン --> <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> <!-- ユーザー名 --> <span class="user"><%= link_to micropost.user.username, micropost.user %></span> <span class="content"> <!-- 投稿文 --> <%= micropost.content %> <!-- 投稿写真 --> <%= image_tag micropost.picture.url if micropost.picture? %> </span> <!-- 投稿時間 --> <span class="timestamp"> Posted <%= time_ago_in_words(micropost.created_at) %> ago. </span> <!-- 削除リンク --> <% if current_user?(micropost.user) %> <%= link_to "delete", micropost, method: :delete, data: { confirm: "You sure?" } %> <% end %> <!-- お気に入り登録リンク user-to-user--> <% if user_signed_in? %> <% if !current_user?(micropost.user) %> <div id="follow_form"> <%= render 'favorites/favorite_links', micropost: micropost %> </div> <% end %> <% end %> <!-- Shop ver--> <% elsif @page == 1 || @account == 4 %> <!-- ショップアイコン --> <%= link_to gravatar_to(micropost.shop, size: 50), micropost.shop %> <!-- ショップ名 --> <span class="shop"><%= link_to micropost.shop.shopname, micropost.shop %></span> <span class="content"> <!-- 投稿文 --> <%= micropost.content %> <!-- 投稿写真 --> <%= image_tag micropost.picture.url if micropost.picture? %> </span> <!-- 投稿時間 --> <span class="timestamp"> Posted <%= time_ago_in_words(micropost.created_at) %> ago. </span> <!-- 削除リンク --> <% if current_shop?(micropost.shop) %> <%= link_to "delete", micropost, method: :delete, data: { confirm: "You sure?" } %> <% end %> <!-- いいね!リンク shop-to-shop --> <% if shop_signed_in? %> <% if !current_shop?(micropost.shop) %> <div id="follow_form"> <%= render 'likes/like_links', micropost: micropost %> </div> <% end %> <% end %> <!-- お気に入り登録リンク user-to-shop -->←ここから本件該当部分です! <% if user_signed_in? %> <% if !current_user?(micropost.user) %> <div id="follow_form"> <%= render 'goods/good_links', micropost: micropost %> </div> <% end %> <% end %>←ここまで本件該当部分です! <% end %> </li>
一応、パーシャルも追記します!
【goods/_good_links.html.erb】
<% if micropost.gooded_by? current_user %> <%= link_to "お気に入りの解除", micropost_goods_path(micropost.id), method: :delete, remote: true %> <% else %> <%= link_to "お気に入り登録", micropost_goods_path(micropost.id), method: :post, remote: true %> <% end %>
pathの定義も書いておきます!
【routes.rb】
省略 resources :microposts, only:[:create, :destroy] do resource :favorites, only: [:create, :destroy] resource :likes, only: [:create, :destroy] resource :goods, only: [:create, :destroy] end 省略
【micropost.rb】
省略 def gooded_by? user goods.where(user_id: user.id).exists? end 省略
何個か違う引数を試したのですがだめでした。。。
ヘルプミーです。。。
回答2件
あなたの回答
tips
プレビュー