javascript - before_update 无法与 Ajax、Rails 4 一起正常工作

标签 javascript jquery ruby-on-rails ruby ajax

用户根据他们完成的里程碑数量获得积分。我有一个用户使用 Ajax 完成的里程碑列表,并且里程碑点应该添加到用户的点上。

数据库正确更新并正确刷新页面更新,但是在 Ajax 调用后渲染部分内容却没有。

我假设这与 before_update 回调有关,但我无法弄清楚。

Controller milestones_controller.rb

def update
  @milestone = Milestone.find(params[:id])
  if @milestone.update_attributes(complete: true)
    flash.now[:notice] = "You completed #{@milestone.title} for #{@milestone.points} points!"
    respond_to do |format|
      format.html { redirect_to current_user }
      format.js { render :action => "milestones" }
    end
  else
    redirect_to current_user
    flash[:alert] = "Not working"
  end
end

js milestones.js.erb

$('.user_points').html('<%=  escape_javascript(render :partial => 'users/partials/user_points') %>');

模型 milestone.rb

before_update :add_user_points, if: :complete_changed?

private

  def add_user_points
    user = User.friendly.find(user_id)
    user.update(points: user.points + self.points)
  end

部分和 View users/partials/_user_points.html.erb

<%= pluralize(@user.points, "point") %>

users/show.html.erb

<div class="user_points">
  <%= render 'users/partials/user_points' %>
</div>

最佳答案

您的 ajax 文件似乎与方法名称不匹配。在这里,您有 update 方法,但使用 milestone.js.erb 文件。

您必须更改此处的几个部分。

Controller

你必须编辑你的格式js。

def update
  @milestone = Milestone.find(params[:id])
  if @milestone.update_attributes(complete: true)
    flash.now[:notice] = "You completed #{@milestone.title} for #{@milestone.points} points!"
    respond_to do |format|
      format.html { redirect_to current_user }
      format.js
    end
  else
    redirect_to current_user
    flash[:alert] = "Not working"
  end
end

然后,您必须将 milestones.js.erb 更改为 update.js.erb。我希望这对您有帮助。

关于javascript - before_update 无法与 Ajax、Rails 4 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621393/

相关文章:

javascript - onEnrollmentLink() 函数的正确用法?

Javascript 函数仅适用于一个变量

jquery - 获取 ColorBox 中的当前项目编号

javascript - 添加溢出 : scroll only when the window size is 1366 * 768 and below

javascript - 使用 webpack 时无法使用 routeprovider 加载模板

Javascript:在 For 循环中等待一个(或多个)条件

javascript - IE < 9 显示显示 "Member not found"

sql - 更好的 SQL - :group vs. :select => 'DISTINCT'

ruby-on-rails - Docker compose-build 与 rake Assets :precompile

ruby-on-rails - Array(x) 是什么样的 ruby​​ 方法调用