Rails更新数据库字段的常用方法

时间:2016-06-02 03:15:50

标签: ruby-on-rails update-attributes

我是rails的新手,我有一个任务是编写一个通用方法来更新具有给定值的特定数据库字段。我应该可以从应用程序的任何地方调用该方法。(我理解安全漏洞等等。但我还是被要求这样做)在我的应用程序控制器中我试过< / p>

ifelse(a < 0.001, format(a, digits = 2, nsmall = 2), round(a, 2))
# [1] "0.46"    "6.4e-06"

当然这不起作用..如何实现这一目标?这样做的正确方法是什么?如果有可能如何将模型作为参数传递给方法?

3 个答案:

答案 0 :(得分:1)

试试这个:

  def update_my_model_status(model,id,field, value)
    @model_var = model.capitalize.constantize.find(id)
    @model_var.update_attributes(field: value)
  end

答案 1 :(得分:1)

如果您正在使用Rails,为什么不使用Rails?

比较update_all

MyModel.where(id: 1).update_all(banned: true)

或者update_attribute

my_model.update_attribute(:banned, true)

为:

update_my_model_status(MyModel, 1, :banned, true)

请注意,尽管时间较短,但前两种方法的表现方式明显优于上一种方法 - 更明显的是发生了什么。不仅如此,它们对于街道上的任何Rails开发人员来说都会更加熟悉,而自定义的开发人员则具有学习曲线。这与不必要的方法中添加的代码相结合,增加了应用程序的维护成本。此外,Rails方法经过了充分测试和记录 - 您是否也计划编写它?最后,更好地考虑Rails方法 - 例如,您的原型天真地使用属性验证,但不检查它们(这可能导致意外行为)并且产生比它需要更多的SQL查询。编写自定义方法很好,但是不要在完美的Rails方法周围编写任意包装器......

答案 2 :(得分:0)

您应该使用update

,而不是仅使用update_attributes
 def update_my_model_status(model,id,field, value)
    @model_var = model.find(id)
    @model.update_attributes(field: value)
  end

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update