我目前正在使用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,但不能在我的生活中弄明白。
提前感谢您的帮助。克里斯
答案 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
合并到参数中。但我发现使用了一个优选的块,因为它清楚地表明您正在使用参数中未提供的值。