Rails使用AJAX act_as_votable来停止页面重新加载

问题描述 投票:0回答:2

我试图能够在没有页面重新加载的情况下使用acts_as_votable进行upvote,但我不确定如何更改路由以使其工作

调节器

def upvote
    @video = Video.find(params[:id])
    @ip = request.remote_ip
    # Ipaddresstracker.delete_all
    if Ipaddresstracker.find_by(ipaddress: @ip)

    else
       Ipaddresstracker.create(:ipaddress => @ip, :upvoted => true, :upvotedcount => 1)
       @video.vote_by voter: User.first, :duplicate => true
    end
  # redirect_to :back
    respond_to do |format|
    format.html { redirect_to :back }
    format.js { render layout: false }
  end
end

视图

<%= link_to like_video_path(x), method: :get, remote: true, class: "btn btn-default btn-sm" do %>

路线

resources :videos do
  member do
    put "like", to: "videos#upvote"
    put "dislike", to: "videos#downvote"
  end
end

错误

ActionController :: RoutingError(没有路由匹配[GET]“/ videos / 53 / like”):

ruby-on-rails
2个回答
1
投票

该路线需要put请求。将:method选项更改为:put

<%= link_to like_video_path(x), method: :put, remote: true, class: "btn btn-default btn-sm" do %>

1
投票

实际上,如果你有Jquery,你可以通过Jquery解决这个问题。如果没有,请尝试更改此format.js { render layout: false }。您需要渲染任何内容,以便在format.js块中设置render :nothing => true

© www.soinside.com 2019 - 2024. All rights reserved.