我试图能够在没有页面重新加载的情况下使用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”):
该路线需要put
请求。将:method
选项更改为:put
<%= link_to like_video_path(x), method: :put, remote: true, class: "btn btn-default btn-sm" do %>
实际上,如果你有Jquery,你可以通过Jquery解决这个问题。如果没有,请尝试更改此format.js { render layout: false }
。您需要渲染任何内容,以便在format.js块中设置render :nothing => true