没有attr_accessible的活动记录更新属性

时间:2014-08-25 01:32:47

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2

我有一个模型文章。创建后,我们会使用令牌向用户发送激活码。 此激活码是故意黑名单,因此不会添加到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

更新记录的其他选择

1 个答案:

答案 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回调,但它需要你设置开销的虚拟属性。

如果有帮助,请告诉我。