当用户取消关注时,使用ajax js.erb从Feed中删除特定内容

时间:2016-11-30 22:44:14

标签: ruby-on-rails ajax

我的应用的许多区域都有follow form rendered。有一个feed view,其中显示了followed个用户的内容。当用户为unfollowed时,我需要更新该页面以删除unfollowed用户的内容。因此,一个解决方案是将所有feed content置于部分中,并在relationship destroyed之后通过destroy.js.erb ajax文件从{Relationships Controller呈现该部分1}}。

UsersController
def feed
  @user_feed_items = current_user.photo_feed.order('created_at desc').paginate(page: params[:page])
end

class User
def photo_feed
    following_ids = "SELECT followed_id FROM relationships
                     WHERE follower_id = :user_id"
    Photo.approved.where("user_id IN (#{following_ids})", user_id: id)
end

feed.html.erb
  <%= render 'shared/feed' %>
end

_feed.html.erb
<% if @user_feed_items.any? %>
  <% @user_feed_items.each do |feed| %>
    <div class="feed-content">
      <%= render partial: "users/usersforfeed", locals: { feed: feed } %>
    </div>  
  <% end %>
<% end %>

现在Relationships Controller看起来像这样:

def destroy
  @user = Relationship.find(params[:id]).followed
  current_user.unfollow(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
end

通过以下表单传递给关系控制器的所有内容都是user.id'sfollowed的{​​{1}}。

所以在follower users

destroy.js.erb

我无法呈现部分因为我没有任何东西可以与feed变量匹配?

1 个答案:

答案 0 :(得分:0)

我在每个对象周围放置了一个包装器,然后如果用户被取消关注,则只需使用javascript删除它。这比再次渲染Feed更容易,并且在重新渲染Feed时没有获得任何结果。