【问题标题】:Rails link_to with ajax remote true not updating viewRails link_to with ajax remote true 不更新视图
【发布时间】:2016-04-28 17:16:13
【问题描述】:

我有这个有事件的小应用程序。在我的事件索引视图中,我遍历所有事件并显示一些数据。在each 循环中,我有一个指向“支持”特定事件的链接,这是一个ajax 请求。由于某些原因,我的视图不会立即更新,但是当我再次单击“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_&lt;%= event.id %&gt; 我已将Votes 计数隔离在一个部分内。

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

【问题讨论】:

  • @rob 我已经更新了问题以显示我设置 id 的位置:upvotes_&lt;%= @event.id %&gt;

标签: javascript jquery html ruby-on-rails ajax


【解决方案1】:

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

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

【讨论】:

  • 嘿 Santanu 解决了这个问题。非常感谢。我还没有看到必须使用reload 的示例。再次感谢。
【解决方案2】:

要添加到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

increment!

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2011-11-02
    • 2012-12-04
    • 2012-07-03
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多