Jquery Rails:更新投票数';计票';使用Ajax
我的rails应用程序中有一个非常简单的向上投票系统。每次有人投票时,我都会通过ajax请求更新投票数。但我不知道我错过了什么 app/controllers/pin_controller.rbJquery Rails:更新投票数';计票';使用Ajax,jquery,ruby-on-rails,ruby,ajax,Jquery,Ruby On Rails,Ruby,Ajax,我的rails应用程序中有一个非常简单的向上投票系统。每次有人投票时,我都会通过ajax请求更新投票数。但我不知道我错过了什么 app/controllers/pin_controller.rb def upvote @pin = Pin.friendly.find(params[:id]) @pin.votes.create(user_id: current_user.id) respond_to do |format| format.json { render jso
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.json { render json: { count: @pin.votes_count } }
end
end
<span class='pin-<%=pin.id%>'>
<%= link_to upvote_pin_path(pin), method: :put, remote: true do %>
<% if pin.votes.where(user_id: current_user.id).empty? %>
<i class="fa fa-star"></i>
<%= pin.votes.count %>
</span>
$("pin-<%=pin.id%>").html('<%=escape_javascript pin.votes.count %>');
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.js # no need to pass a variable here
end
end
app/views/pins/index.html.erb
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.json { render json: { count: @pin.votes_count } }
end
end
<span class='pin-<%=pin.id%>'>
<%= link_to upvote_pin_path(pin), method: :put, remote: true do %>
<% if pin.votes.where(user_id: current_user.id).empty? %>
<i class="fa fa-star"></i>
<%= pin.votes.count %>
</span>
$("pin-<%=pin.id%>").html('<%=escape_javascript pin.votes.count %>');
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.js # no need to pass a variable here
end
end
*app/views/pins/upvote.js.erb
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.json { render json: { count: @pin.votes_count } }
end
end
<span class='pin-<%=pin.id%>'>
<%= link_to upvote_pin_path(pin), method: :put, remote: true do %>
<% if pin.votes.where(user_id: current_user.id).empty? %>
<i class="fa fa-star"></i>
<%= pin.votes.count %>
</span>
$("pin-<%=pin.id%>").html('<%=escape_javascript pin.votes.count %>');
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.js # no need to pass a variable here
end
end
$(“pin-”).html(“”);
你知道我缺少什么来让它工作吗
更新:
来自控制台的错误:
发送jquery.js?body=1:9667jQuery.extend.ajax jquery.js?body=1:9212$.rails.rails.ajax jquery\u ujs.js?body=1:81$.rails.rails.handleRemote jquery\u ujs.js?body=1:157(匿名函数)jquery\u ujs.js?body=1:307jQuery.event.dispatch jquery.js?body=1:4625elemData.handle
服务器日志错误:
ActionView::Template::Error(3:Fixnum的未定义方法gsub):
1:$(“.pin-”).html(“”);
app/views/pins/upvote.js.erb:1:in
\u app\u views\u pins\u upvote\u js\u erb\u 4096032730150237755\u 70323561115600'
app/controllers/pins_controller.rb:53:in'upvote'
解决方案:
将此行修改为in upvote.js.erb:
$(“.pin-”).html(“”) 使用“format.js”,而不是“format.json”。您有几个错误: app/controllers/pin_controller.rb
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.json { render json: { count: @pin.votes_count } }
end
end
<span class='pin-<%=pin.id%>'>
<%= link_to upvote_pin_path(pin), method: :put, remote: true do %>
<% if pin.votes.where(user_id: current_user.id).empty? %>
<i class="fa fa-star"></i>
<%= pin.votes.count %>
</span>
$("pin-<%=pin.id%>").html('<%=escape_javascript pin.votes.count %>');
def upvote
@pin = Pin.friendly.find(params[:id])
@pin.votes.create(user_id: current_user.id)
respond_to do |format|
format.js # no need to pass a variable here
end
end
app/views/pins/index.html.erb您没有将
*app/views/pins/upvote.js.erbjQuery选择器错误,变量调用也错误
$(".pin-<%=@pin.id%>").html('<%= @pin.votes.count.to_s %>');
$(“.pin-”).html(“”);
谢谢你的回答,菲利克斯。不幸的是,页面仍然需要刷新以显示更新后的值检查服务器是否以JS响应。为此,打开Chrome开发者工具的“网络”选项卡,单击“投票”,然后查看发送的请求。响应应该类似于“$(“.pin-12”).html('21');”。如果不是,请检查服务器日志中是否有任何错误。我无法理解日志中的错误。如果有错误,请使用返回的服务器日志中的错误(运行rails s
)编辑我的答案