簡體   English   中英

Rails:使用Ajax更新投票數“ votes_count”

[英]Rails: update the number of votes 'votes_count' with Ajax

我的rails應用程序中有一個非常簡單的upvote系統。 每當有人投票給Pin時,我都想通過ajax請求來更新votes_count。 但是我無法弄清楚我所缺少的。

應用程序/控制器/ 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

應用程序/視圖/針/ index.html.erb

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

*應用/視圖/針/ upvote.js.erb

$("pin-<%=pin.id%>").html('<%=escape_javascript pin.votes.count %>');

有什么想法讓我無法實現嗎?

更新: 來自控制台的錯誤:

發送jquery.js?body = 1:9667jQuery.extend.ajax jquery.js?body = 1:9212 $ .rails.rails.ajax jquery_ujs.js?body = 1:81 $ .rails.rails.handleRemote jquery_ujs.js? body = 1:157(匿名函數)jquery_ujs.js?body = 1:307jQuery.event.dispatch jquery.js?body = 1:4625elemData.handle

服務器日志錯誤:

ActionView :: Template :: Error( gsub' for 3:Fixnum): 1: $(".pin-<%=@pin.id%>").html('<%=escape_javascript @pin.votes.count %>'); app/views/pins/upvote.js.erb:1:in未定義方法gsub' for 3:Fixnum): 1: $(".pin-<%=@pin.id%>").html('<%=escape_javascript @pin.votes.count %>'); app/views/pins/upvote.js.erb:1:in gsub' for 3:Fixnum): 1: $(".pin-<%=@pin.id%>").html('<%=escape_javascript @pin.votes.count %>'); app/views/pins/upvote.js.erb:1:in _app_views_pins_upvote_js_erb___4096032730150237755_70323561115600'app / controllers / pins_controller.rb:53:在`upvote'中

解:

將此行修改為upvote.js.erb:

$(“。pin-<%= @ pin.id%>”)。html('<%= @ pin.votes.count%>');

使用“ format.js”,而不是“ format.json”。

您有幾個錯誤:

應用程序/控制器/ pin_controller.rb

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,您沒有輸入<%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>
      <% end %>
  <% end %>
  <%= pin.votes.count %>
</span>

* app / views / pins / upvote.js.erb jQuery選擇器錯誤,變量調用也錯誤

$(".pin-<%=@pin.id%>").html('<%= @pin.votes.count.to_s %>');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM