我有一个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”块之前,但结果是一样的。
我已经记录了响应,只有我的代码的“搜索”选项才会更新视图,因为它不会更新任何内容。
答案 0 :(得分:1)
似乎所有问题都在 current_user
变量中,该变量包含登录用户(由Devise设置)。它受缓存影响。
解决方案是在控制器中添加它:
@user = User.find(current_user.id)
删除控制器和视图中对current_user
的任何引用。