我有一个有事件的小应用程序。在事件的索引视图中,我遍历所有事件并显示一些数据。在each循环中,我有一个指向“ Upvote”特定事件的链接,这是一个ajax请求。由于某些原因,我的视图不会立即更新,但是当我再次单击“ Upvote”时会更新。

这是我指向“ Upvote”的链接

<div id="upvote_link_<%= event.id%>">
   <%= link_to('Upvote', upvote_event_path(event), method: :post, remote: true)%>
</div>


这是我的upvote方法,在其中增加votes字段。

  def upvote
    @event = Event.find(params[:id])
    Event.increment_counter(:votes, @event.id)
    respond_to do |format|
      format.js
    end
  end


接下来是我的upvote.js.erb,在这里我用新值替换了旧的votes值。

$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event )%>");


接下来是我的_upvote.html.erb部分,它替换了旧的votes值。

<span style="font-family:MetaSerifOT-Book;font-size:13px;">
    <%= pluralize(event.votes, "vote") %>
</span>


问题是,当我单击“ Upvote”链接时,我的请求通过了,事件模型中的votes字段得到了更新,但是视图直到我再次单击Upvote时才更新。我不确定发生了什么。有什么想法或建议吗?

更新资料
这是我设置ID的地方:upvotes_<%= event.id %>我已将Votes计数隔离在部分内部。

    <div id="upvotes_<%= event.id%>">
            <%= render 'upvote', event: event %>
    </div>

最佳答案

问题出在控制器代码中。我认为@event对象没有被重新加载。一种解决方案是您必须在类似这样的视图中重新加载@event对象

$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event.reload )%>");

关于javascript - Rails link_to与Ajax远程true不更新​​ View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34941052/

10-10 08:51