before_update与Ajax,Rails 4无法正常工作

时间:2015-11-10 01:32:15

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

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

数据库正确更新并正确刷新页面更新,但是在Ajax调用之后没有呈现部分更新。

我认为这与before_update回调有关,但在我的生活中无法弄明白。

控制器 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

partial and view users / partials / _user_points.html.erb

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

用户/ show.html.erb

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

1 个答案:

答案 0 :(得分:1)

好像你有一个与方法名称不匹配的ajax文件。在这里,您使用update方法,但使用milestone.js.erb文件。

你必须在这里更改几个部分。

<强>控制器

您必须编辑格式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。我希望这能帮到你。