プログラミング初心者です。Railsを学んでいます。
最近、remote: trueでAjaxを使った画面切り替えを学びました。
そこで表題通りのことをやってみようと思ったのですが、やはりページを更新しないと「いいね!」のカウントが増えない…
具体的に言うと、画面上の「いいね!」という文字(アイコンは使わない)をクリックすると、文字の横にあるカウント数(いいね!が押された総数)が1つ増える、ということをページの更新なしでしたいのですが、いまいち理解できていなくてどうすればいいのかわかりません。
以下に関わっていると思われるサンプルコードを示しますが、過不足がありましたらご指摘ください。ホントよくわかってません。
「いいね!」を置くページは特定のブログ記事のshowページとします。
※あくまで練習用・学習用のアプリケーションです。この例ではユーザー認証を省き、誰でも記事を1回見るごとに1回ずつ「いいね!」できるようにしています。
BlogModel
1 has_many :likes, dependent: :destroy
LikeModel
1 belongs_to :blog, counter_cache: :likes_count
BlogsController
1 def show 2 @blog = Blog.find(params[:id]) 3 end
html
1views/blogs/show.html.erb 2 3<span id="like-it"> 4 <span><%= link_to 'いいね!', blog_likes_path(@blog),method: :post, remote: true %></span> 5 <span><%= @blog.likes_count %>件</span> 6</span>
LikesController
1 def create 2 @blog = Blog.find(params[:id]) 3 like = Like.create(blog_id: params[:blog_id]) 4 end
js
1views/likes/create.js.erb 2 3$("#like-it").html("<%= j(render 'like') %>")
html
1views/likes/_like.html.erb 2 3<span>いいね!しました。</span> 4<span><%= @blog.likes_count %>件</span>
と、ここまで来てもうわかりません…
リンクの "いいね!" を押すと部分テンプレの "いいね!しました。" に切り替わるのですが、このままでは当然<%= @blog.likes_count %>は増えません。
リンクの "いいね!" を押すと "いいね!しました。" に切り替わるのと同時に、<%= @blog.likes_count %>を更新するにはどうすればいいのでしょうか。具体的に教えていただけると助かります。
回答1件
あなたの回答
tips
プレビュー