我有一个模型文章。创建后,我们会使用令牌向用户发送激活码。 此激活码是故意黑名单,因此不会添加到attr_accesible列表。
一旦用户回来激活代码
articleitem = Article.find_by_activation_code(params[:code])
articleitem.activation_code = ""
现在我们如何更新记录。我不想使用保存,因为它激活了before_save方法
我在控制器中尝试了以下所有内容。
articleItem.update(activation_code: "")
update method is private
articleItem.update_attributes(activation_code: "")
WARNING: Can't mass-assign protected attributes: activation_code
更新记录的其他选择
答案 0 :(得分:1)
另一种方法是设置虚拟属性(未测试代码)
in model
attr_accessor :execute_before_save
before_save :some_method
def some_method
# Check is execute_before_save is set, if not let the method execute no matter what
if execute_before_save || true
# your code follows
end
end
in your controller
articleitem = Article.find_by_activation_code(params[:code])
articleItem.execute_before_save = false
articleitem.activation_code = ""
articleitem.save
这样你可以控制before_save
回调,但它需要你设置开销的虚拟属性。
如果有帮助,请告诉我。