ruby-on-rails – validation_context和update_attributes

ruby-on-rails – validation_context和update_attributes,第1张

概述如何使用update_attributes指定validation_context? 我可以使用2个 *** 作(没有update_attributes)来做到这一点: my_model.attributes = { :name => '123', :description => '345' }my_model.save(:context => :some_context) 没有办法做到这一点,这里是u 如何使用update_attributes指定valIDation_context?

我可以使用2个 *** 作(没有update_attributes)来做到这一点:

my_model.attributes = { :name => '123',:description => '345' }my_model.save(:context => :some_context)
解决方法 没有办法做到这一点,这里是update_attributes的代码(这是更新的别名)

def update(attributes)  with_transaction_returning_status do    assign_attributes(attributes)    save  endend

正如您所看到的那样,只需分配给定的属性并保存,而不将任何参数传递给save方法.

这些 *** 作包含在传递给with_transaction_returning_status的块中,以防止某些分配修改关联数据的问题.因此,在手动调用时,您可以更安全地封闭这些 *** 作.

一个简单的技巧是将依赖于上下文的公共方法添加到模型中,如下所示:

def strict_update(attributes)  with_transaction_returning_status do    assign_attributes(attributes)    save(context: :strict)  endend

您可以通过将update_with_context权限添加到ApplicationRecord(Rails 5中所有模型的基类)来改进它.所以你的代码看起来像这样:

class ApplicationRecord < ActiveRecord::Base  self.abstract_class = true  # Update attributes with valIDation context.  # In Rails you can provIDe a context while you save,for example: `.save(:step1)`,but no way to  # provIDe a context while you update. This method just adds the way to update with valIDation  # context.  #  # @param [Hash] attributes to assign  # @param [Symbol] valIDation context  def update_with_context(attributes,context)    with_transaction_returning_status do      assign_attributes(attributes)      save(context: context)    end  endend
总结

以上是内存溢出为你收集整理的ruby-on-rails – validation_context和update_attributes全部内容,希望文章能够帮你解决ruby-on-rails – validation_context和update_attributes所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1289169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存