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

Rails common method for updating a database field

我是 rails 的新手,我的任务是编写一个通用方法,用给定的值更新特定的数据库字段。而且我应该能够从应用程序中的任何地方调用该方法。(我了解安全漏洞等。但我还是被要求这样做) 在我的应用程序控制器中我试过了

  def update_my_model_status(model,id,field, value)
    @model = model.find(id)
    @model.update(field: value)
  end

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

除了使用 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

试试这个:

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

如果您使用 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 方法编写任意包装器...