我想更新(添加或减去)User.points_balance Point.point_moving的值
我需要从Point.user_id获取用户(用户未登录)
我没有收到错误消息,创建了点,但没有更新User.points_balance。
我的points.controller
def create
@point = Point.new(point_params)
@point.save
@user = User.find(params[@point.user_id])
if user && user.increment(:points_balance, by = @point.points_moving)
respond_to do |format|
format.html { redirect_to :back, notice: 'Saved.' }
format.json { render :show, status: :created, location: @user }
end
end
问题更新: 有这么多麻烦做到这一点,无法弄清楚为什么。,这怎么样?
我有点控制器:user_id和:points_moving
我有用户控制器:需要更新的points_balance(添加/减去)Point.points_moving值。
我该如何创建一个单独的方法来更新User.points_balance(添加或减去Point.point_moving的值),然后从Points控制器上调用方法:create?
希望这是有道理的......
答案 0 :(得分:0)
请注意您正在使用user.increment
。何时应增加@user
def create
@point = Point.new(point_params)
@point.save
@user = User.find(params[@point.user_id])
if @user && @user.increment(:points_balance, by = @point.points_moving)
respond_to do |format|
format.html { redirect_to :back, notice: 'Saved.' }
format.json { render :show, status: :created, location: @user }
end
end
如果能解决您的问题,请告诉我。
您希望User
point_balance
增加,但您需要增加update_count
。
答案 1 :(得分:0)
我打算建议使用@user.increment!(:update_count, by = @point.point_moving)
。请注意!
,这会导致它更新数据库。与您刚刚更新实例变量的版本不同。
但是,如果您有多个请求在同一时间递增同一个用户,这可能非常活泼。所以我会避免这种情况“阅读然后再写”。方法,并直接在数据库中这样做:
User.where(id: @user.id).
update_all("update_count = update_count + #{@point.point_moving}")