RoR修改记录时保存当前用户ID

时间:2018-03-03 14:52:50

标签: ruby-on-rails

我目前正在使用Devise Gem来控制用户身份验证,我想在我的表的modified_by字段中记录当前用户ID。通过这样做

创建记录时,我已经成功记录了用户
# POST /weightsets
def create
 @weightset = Weightset.new(weightset_params)
 @weightset.modified_by = current_user

 if @weightset.save
  redirect_to @weightset, notice: 'Weightset was successfully created.'
 else
  render :new
 end
end

但是,当我尝试相同的更新时,它不会在字段modified_by中保存用户ID

def update
 if @weightset.update(weightset_params)
   @weightset.modified_by = current_user  
  redirect_to @weightset, notice: 'Weightset was successfully updated.'
 else
  render :edit
 end
end

我猜我需要以某种方式传递params中的current_user,但不能在我的生活中弄明白。

提前感谢您的帮助。克里斯

1 个答案:

答案 0 :(得分:1)

在您的更新方法中,您只需更改内存中的值,而不是实际将其持久保存到数据库中。 create方法之间的区别在于,在创建时,您在分配值后调用.save

相反,您可以传递一个块进行更新,这将在持久更改之前产生记录:

def update
  updated = @weightset.update(weightset_params) do |ws|
    ws.modified_by = current_user  
  end 
  if updated
    redirect_to @weightset, notice: 'Weightset was successfully updated.'
  else
    render :edit
  end
end

您可以在create方法中执行相同的操作来清理它:

# POST /weightsets
def create
  @weightset = Weightset.new(weightset_params) do |ws|
    ws.modified_by = current_user
  end

  if @weightset.save
    redirect_to @weightset, notice: 'Weightset was successfully created.'
  else
    render :new
  end
end

或者,您可以按照@Aarthi的建议将modified_by合并到参数中。但我发现使用了一个优选的块,因为它清楚地表明您正在使用参数中未提供的值。