rails如何使用来自不同控制器的Model.object更新用户属性:create

时间:2016-06-10 09:26:00

标签: ruby-on-rails

我想更新(添加或减去)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?

希望这是有道理的......

2 个答案:

答案 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}")