Rails:类似按钮的Ajax和像Count一样更新

时间:2013-09-03 07:23:10

标签: ruby-on-rails ajax ruby-on-rails-3 jquery

我可以通过ajax更新like和不同的按钮,但是我无法更新类似的数量。

发布has_many喜欢

likes_controller.rb

  def create    
    @like = Like.new(:post_id => params[:post_to_be_liked])
    if @like.save
      respond_to do |format|
        format.html {redirect_to :back, notice: "Liked!"}
        format.js
      end
    end
  end

view.html.erb

<% @post = user.posts.first %>
<div id="send_like_for_<%= @post.id %>">
     <% if @post.is_liked?(@post, current_user)%>
    <%= render 'unlike'%>
     <%else%>
        <%= render 'like'%>
     <%end%>
</div>

<div id="liked_<%= @post.id %>" %>
    <%= render 'liked_users'%>
</div>

create.js.erb

$("#send_like_for_<%= params[:post_to_be_liked]%>").html("<%= escape_javascript(render('users/unlike')) %>")
$("#liked_<%= params[:post_to_be_liked]%>").html("<%= escape_javascript(render('users/liked_users')) %>")

_like.html.erb

<%= link_to "LIKE", likes_path(:post_to_be_liked => @post.id), remote: true, :method=>:post %>

_unlike.html.erb

<span> UNLIKE </span>

_liked_users.html.erb

<%= "#{@post.likes.length} like this" %>

喜欢/不同的功能可以正常工作,当有人喜欢这个帖子时,按钮会变为不同。但类似的数量并没有增加。

2 个答案:

答案 0 :(得分:3)

但你为什么要这样做呢?

<% @post = user.posts.first %>

它将始终只更新您的第一篇文章。我无法理解。

试试这个:

_liked_users.html.erb

<%= @updated_post = Post.where(id: @post.id) %>    
<%= "#{@updated_post.likes.length} like this" %>

<%= @post.reload %>    
<%= "#{@post.likes.length} like this" %>

编辑(尝试建立这样的):

def create
    @post = Post.where(id: params[:post_to_be_liked])    
    @like = @post.likes.build(:post_id => @post.id)
    if @like.save
      respond_to do |format|
        format.html {redirect_to :back, notice: "Liked!"}
        format.js
      end
    end
  end

答案 1 :(得分:0)

我认为你应该尝试这样做

@post = user.posts.first

保存在您的控制器中并删除&lt;%@post = user.posts.first%&gt;从erb文件中,如果不可能,则在控制器#create

中初始化@post
@post = Post.find(params[:post_to_be_liked])
相关问题