###前提・実現したいこと
TwitterやFacebookのような「いいね」ボタンをAjaxで実装したいと思っています。
favorite / unfavorite の partialをAjaxで切り替えたいです。
###発生している問題・エラーメッセージ
上手く値がPartialに渡らないようで、データベースには正しく保存されるのですが、その後のRenderで
undefined local variable or method micropost と出てしまいます。
SQL (0.5ms) INSERT INTO "favorites" ("favpost_id", "favuser_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["favpost_id", 48], ["favuser_id", 1], ["created_at", "2016-04-19 08:15:25.509283"], ["updated_at", "2016-04-19 08:15:25.509283"]] (15.1ms) commit transaction Micropost Load (0.8ms) SELECT "microposts".* FROM "microposts" Rendered favorites/fav.js.erb (69.8ms) Completed 500 Internal Server Error in 124ms (ActiveRecord: 17.1ms) ActionView::Template::Error (undefined local variable or method `micropost' for #<#<Class:0x007f099c07e3b8>:0x007f09aea77ad8>): 1: $("#favorite_<%= micropost.id %>").html("<%= escape_javascript(render('users/fav'), locals => { :micropost => micropost }) %>"); app/views/favorites/fav.js.erb:1:in `_app_views_favorites_fav_js_erb__895208058350091589_69839624644240'
###該当のソースコード
ruby
1<% if current_user.favorite?(micropost) %> 2<%= render :partial => 'users/unfav', :locals => { :micropost => micropost } %> 3<% else %> 4<%= render :partial => 'users/fav', :locals => { :micropost => micropost } %> 5<% end %>
ruby
1user/fav.html.erb 2<%= link_to "いいね", favorite_favorite_path(micropost), :remote => true, :class => "btn btn-primary btn-xs" , "data-type" => "html" %>
ruby
1user/unfav.html.erb 2<%= link_to "いいね解除", unfavorite_favorite_path(micropost), :remote => true, :class => "btn btn-default btn-xs", "data-type" => "html" %>
ruby
1fav.js.erb 2$("#favorite_<%= micropost.id %>").html("<%= escape_javascript(render :partial => 'users/fav', :locals => { :micropost => @micropost }) %>");
ruby
1unfav.js.erb 2$("#favorite_<%= micropost.id %>").html("<%= escape_javascript(render :partial => 'users/unfav', :locals => { :micropost => @micropost }) %>");
###試したこと
・remote: true を外した状態だと正常に値も入ります。
・localsの部分の書き方は一通り試したつもりです。
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 4.2.1
Cloud9
で実装しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/20 05:25 編集