Rails link_to与ajax远程真正不更新视图
我有这个小事件的应用程序。在我的事件索引视图中,遍历所有事件并显示一些数据。在each
循环内部,我有一个“Upvote”特定事件的链接,这是一个ajax请求。由于某些原因,我的视图不会马上更新,而是在再次单击“Upvote”时更新。Rails link_to与ajax远程真正不更新视图
这里是我的链接“给予好评”
<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>
问题是,当我点击了“给予好评”链接我的请求经过和votes
场在我的事件模型被更新,但鉴于不会更新,直到我再次点击Upvote
。我不确定发生了什么事。任何想法或建议?
更新 这是我设置的ID:upvotes_<%= event.id %>
我已经分离出里面的部分的Votes
计数。
<div id="upvotes_<%= event.id%>">
<%= render 'upvote', event: event %>
</div>
问题出在控制器代码中。我认为@event对象没有被重新加载。一种解决方案是,您必须在像
$('#upvotes_<%= @event.id %>').html("<%= escape_javascript (render 'upvote', event: @event.reload)%>");
这样的视图中重新加载@event对象。
嘿Santanu解决了这个问题。非常感谢。我还没有看到一个用户需要重新加载的例子。再次感谢。 –
谢谢Elvyn Mejia,我的答案是PLZ票。 – Santanu
这应该被接受,如果正确 –
要添加到Santanu
的答案,你要看看你的方法的代码:
#app/controllers/events_controller.rb
class EventsController < ApplicationController
respond_to :js, only: :upvote #-> if you have the responders gem
def upvote
@event = Event.find params[:id]
@event.increment! :votes
respond_with @event
end
end
@rob我已经更新的问题,以显示在哪里设置ID:'upvotes_ ' –