首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails和ajax : act_as_votable行为

Rails和ajax : act_as_votable行为
EN

Stack Overflow用户
提问于 2016-12-05 20:10:17
回答 1查看 74关注 0票数 1

我已经在我的应用程序上创建了一个相似的按钮来喜欢帖子,但是我希望在不刷新页面的情况下,类似的附加在计数上看到de +1,“have”按钮是否被填满。我尝试了以下代码,但我有以下错误:

代码语言:javascript
复制
jquery.self-bd7ddd3….js?body=1:10255 PUT http://localhost:3000/posts/12/like 500 (Internal Server Error)

这是我的_posts.html.erb文件:

代码语言:javascript
复制
<div class="vote-rv">
          <% if current_user.liked? post %>
            <%= link_to "", dislike_post_path(post), class: "dislike fa fa-heart", method: :put, remote: true %>
          <% else %>
            <%= link_to "", like_post_path(post), class: "like fa fa-heart-o", method: :put, remote: true %>
          <% end %>
          <span class="badge" data-id="<%= post.id %>"><%= post.get_likes.size %></span>
          </div>

这是我的routes.rb

代码语言:javascript
复制
resources :travels, :shallow => true do
        # Posts
        resources :posts do
            member do
                put "like" => "posts#like"
                put "dislike" => "posts#dislike"
            end
        end
    end

这是我的posts_controller.rb (喜欢和不喜欢的方法)

代码语言:javascript
复制
def like
        @post.like_from current_user
        respond_to do |format|
            format.html { redirect_to :back }
            format.json { head :no_content }
            format.js { render :layout => false }
        end
    end

    def dislike
        @post.dislike_by current_user
        respond_to do |format|
            format.html { redirect_to :back }
            format.json { head :no_content }
            format.js { render :layout => false }
        end
    end

知道问题出在哪里了吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 22:24:58

您需要包含两个js.erb文件,一个名为like.js.erb,另一个称为dislike.js.erb,它们响应控制器中类似的和不喜欢的方法。

下面是like.js.erb ajax文件的一个示例。在视图/帖子下面,与您的_posts.html.erb文件位于同一个文件夹中:

代码语言:javascript
复制
$('.like').bind('ajax:success', function() {
    $('<%= post.id %>').html('<%= escape_javascript post.get_likes.size %>');
    $('#like_<%= post.id %>').removeClass('fa-heart-o').addClass('fa-heart');
});

对于dislike.js.erb文件,您需要做类似的事情,但切换类名,并将post.get_likes.size更改为post.get_dislikes.size,并在视图中添加该行,如果您确实希望看到不喜欢计数的话。

您还需要向类似的视图添加一个ID,这样ajax的心脏改变就可以正常工作了:

代码语言:javascript
复制
<%= link_to "", like_post_path(post), id: "like_<%= post.id %>", class: "like fa fa-heart-o", method: :put, remote: true %>

将喜欢和不喜欢的方法更改为:

代码语言:javascript
复制
@post.liked_by current_user
respond_to do |format|
    format.html { redirect_to :back }
    format.js
end

@post.disliked_by current_user
respond_to do |format|
    format.html { redirect_to :back }
    format.js
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40982483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档