Rails控制器在保存模型之前发送js响应

时间:2014-08-20 09:28:18

标签: ajax ruby-on-rails-3

我有一个Rails控制器,它通过POST更新模型并发送一个js响应来相应地更新视图。

但是,在保存模型并且未正确显示模型之前会发送响应。

我的控制器:

def reload_regional_groups_ajax

  @shown_regional_groups = RegionalGroup.limit(4)
  @map_data = RegionalGroup.all.to_gmaps4rails

  if params[:exec] == "join"
    if current_user.can_join_new_group?
      @regional_group_membership = RegionalGroupMembership.new({:user_id => current_user.id, :regional_group_id => params[:reg_id]})
      @regional_group_membership.save
    else
      raise t("view.regional_group.membership.create.limit")
    end

  elsif params[:exec] == "remove"
    @regional_group_membership = RegionalGroupMembership.where("user_id = ? and regional_group_id = ?", current_user.id, params[:reg_id])
    RegionalGroupMembership.destroy(@regional_group_membership) 
  elsif params[:search]
    @shown_regional_groups = RegionalGroup.where("name LIKE ? OR post_code LIKE ?", '%'+params[:search]+'%', params[:search]+'%')
    @map_data = @shown_regional_groups.to_gmaps4rails  
  end

  @regional_groups_user = current_user.regional_groups

  respond_to do |format|
    format.js
  end
end

js文件只重新加载一些部分内容。

我还尝试将if @ model.save放在“respond_to”块之前,但结果是一样的。

我已经记录了响应,只有我的代码的“搜索”选项才会更新视图,因为它不会更新任何内容。

1 个答案:

答案 0 :(得分:1)

似乎所有问题都在 current_user 变量中,该变量包含登录用户(由Devise设置)。它受缓存影响。

解决方案是在控制器中添加它:

@user = User.find(current_user.id)

删除控制器和视图中对current_user的任何引用。