【问题标题】:Rails: Ajax for Like Button and Updating Like CountRails:Ajax 用于点赞按钮和更新点赞数
【发布时间】:2013-09-03 07:23:09
【问题描述】:

我可以通过 ajax 更新点赞和不喜欢按钮,但我无法更新点赞数。

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" %>

like/unlike 功能可以正常工作,当有人喜欢帖子时,按钮会变为 Like。但是点赞数没有增加。

【问题讨论】:

  • 您必须更新您的“@post”对象,因为它包含之前存储的喜欢。
  • 我该怎么做?

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


【解决方案1】:

但在你看来,你为什么要这样做呢?

<% @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

【讨论】:

  • 这是因为我只在用户索引操作中显示用户的第一个帖子(最新的)。让我试试这个。
  • 两者都不起作用。什么也没做。它甚至停止了喜欢/不喜欢的功能
  • @pratski 更新了我的答案。
【解决方案2】:

我认为你应该尝试这样做

@post = user.posts.first

在您的控制器中保存并从 erb 文件中删除 后,如果不可能,则在您的控制器中初始化 @post#create

@post = Post.find(params[:post_to_be_liked])

【讨论】:

  • 我正在遍历用户。因此,为了找到每个用户的帖子,我必须将其保留在视图中。我实际上在做@users.each.do |user|在我看来&lt;% @post = user.posts.first %&gt;之前
  • 问题是 @post 变量在创建时未定义。你可以在你的喜欢中做到这一点#create @ post = Post.find(params[:post_to_be_liked])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多