喜欢按钮不更新与AJAX



我通过:collection选项将一个集合(@feed_items)传递给_feed_item部分,并将其转换为dailypost:as =>:dailypost。

在_feed_item部分中,我为_like_button渲染了另一个部分,并使用:locals继续使用dailypost。

数据库一切正常。喜欢被添加和删除:)但是

我正在尝试使用(AJAX)来创建。js.erb &js.erb . like按钮。由于某种原因,只有顶部的帖子得到正确更新,我必须刷新页面才能看到下面的帖子。

我知道解决方案涉及为每个"喜欢"元素分配一个唯一的帖子id,说"喜欢-123",但这就是我卡住的地方.......

我也知道问题可能在_feed_items.html中。因为我传递了两个id ....有什么建议吗? ?

_feed.html.erb

<% if @feed_items.any? %>
  <ol>
    <%= render partial: 'shared/feed_item', collection: @feed_items, :as => :dailypost %>
  </ol>
<% end %>

_feed_items.html.erb

<li id="<%= @dailypost.id %>">
  <span class="user">
    <%= link_to dailypost.user.name, dailypost.user %>
  <span class="content"><%= dailypost.content_html %></span>
  <div id="like">
    <%= render :partial => 'likes/like_button', :locals =>{:dailypost => dailypost} %>
  </div>
</li>

_like_button.html.erb

<% if like = current_user.likes.find_by_dailypost_id(dailypost.id) %>
 <%= form_for like, :html => { :method => :delete }, :remote => true do |f| %>
   <%= f.submit "Unlike" %>
 <% end %>
<% else %>
 <%= form_for current_user.likes.build, :remote => true do |f| %>
  <div><%= f.hidden_field :dailypost_id, value: dailypost.id %></div>
  <%= f.hidden_field :user_id %>
  <%= f.submit "Like" %>
 <% end %>
<% end %>

create.js.erb

$("#like").html("<%= escape_javascript(render :partial => 'like_button', :locals => {:dailypost => @dailypost}) %>");

destroy.js.erb

$("#like").html("<%= escape_javascript(render :partial => 'like_button', :locals => {:dailypost => @dailypost}) %>");
控制器

class LikesController < ApplicationController

  respond_to :html, :js
  def create
    @like = Like.create(params[:like])
    @dailypost = @like.dailypost
    respond_to do |format|
      format.js
      format.html { redirect_to :back }
    end
  end
  def destroy
    like = Like.find(params[:id]).destroy
    @dailypost = like.dailypost
    respond_to do |format|
      format.js
      format.html { redirect_to :back }
    end
  end
end

嗯。替换_feed_items.html中的第一行。用这个作动词

<li id="dailypost<%= dailypost.id %>">

和在create.js.erb和destroy.js中。动词,进行更改

$("#like").html(...)

$("#dailypost<%= dailypost.id%> #like").html(...)

相关内容

  • 没有找到相关文章

最新更新