编写before_save函数以检查所有目标属性的更好方法不是空白吗?

Zisasign

在我的项目中,我有一个包含四个服装的模型:名称,描述,内容和完成。

我想在保存之前检查所有属性(除已完成外是否为空白)。如果不为空,则将完成设置为1,否则设置为0。

我使用ActiveRecord和Mysql,因此它也将具有id,created_at和Updated_at列。

我写了一个before_save回调,像这样:

def check_completed
  if self.attributes.except("id", "created_at", "updated_at").all? {|k, v| v.present?}
    self.completed = 1
  else
    self.completed = 0
  end
end

它可以工作,但是看起来很丑。我想删除除外函数调用。

有没有更好的方法可以做到这一点?

理查德·G

我假设使用了.except方法,因为id,created_at和updated_at都是由MySQL内部生成和管理的。因此,该列表扩展或更改是不寻常的。我同意所提供的代码是好的。如果要完全缩短它,可以使用三元形式,如下所示:

def check_completed
  self.attributes.except("id", "created_at", "updated_at").all? {|k, v| v.present?} ? 1 : 0
end

消除.except方法可使您在模型更改时随时使用此方法。

扩展讨论:我很好奇您希望返回1或0?没有看到更多代码,我不确定您的意图。但是,如果“之前”回调返回false,则执行将停止并且事务将回滚。在任何其他情况下,执行将继续。在Ruby中,0不为假。False只能由false或nil触发。我的期望是,它更有可能使用true代替1并使用false代替0?如果是这样,代码将是:

def check_completed
  self.attributes.except("id", "created_at", "updated_at").all? {|k, v| v.present?} ? true : false
end

这样,如果不存在任何用户属性,则交易将被取消并回滚。但是,这取决于您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编写函数以获取具有data属性的所有元素

来自分类Dev

在Rails before_save方法中大写多个属性

来自分类Dev

Rails:before_save大写私有方法

来自分类Dev

处理before_save导轨的智能方法

来自分类Dev

具有嵌套属性创建的模型更改了before_validation和before_save之间的关联类型属性

来自分类Dev

检查目标方法可以在.Net中抛出的所有可能的异常吗?

来自分类Dev

在相关模型中的属性更改后运行before_save

来自分类Dev

Idris:是否可以使用“ with”重写所有函数以使用“ case”而不是“ with”?如果没有,您能举个反例吗?

来自分类Dev

如何编写新的#%datum函数以捕获所有字符串?

来自分类Dev

编写一个递归函数以列出parts.txt的所有路径

来自分类Dev

比较字典列表后,编写Python函数以返回与给定输入对应的最大值的更好方法

来自分类Dev

很多构造函数参数-有更好的方法吗?

来自分类Dev

Python:编写函数以检查列表并返回值或无

来自分类Dev

如何编写恒定时间函数以将最高有效位复制到所有位

来自分类Dev

编写cypher并获取Java中所有属性的正确方法

来自分类Dev

编写cypher并获取Java中所有属性的正确方法

来自分类Dev

Rails:`before_save`会干扰`save?`

来自分类Dev

有没有更好的方法在F#/ OCaml中编写交换函数?

来自分类Dev

有没有更好的方法来编写不断变化的图像函数?

来自分类Dev

有没有更好的方法来编写 LINQ 函数?

来自分类Dev

有没有更好的方法在 Clojure 中编写这个枢轴函数?

来自分类Dev

如何像目标C一样快速地编写吸气剂方法,并且有更好的方法

来自分类Dev

如何编写一个异步函数以使用Promise.all从所有.csv文件导入数据?

来自分类Dev

编写带有很多||的if语句的更好方法

来自分类Dev

在相关模型中更改属性后运行before_save

来自分类Dev

“不要问”,不是所有方法都无效吗?

来自分类Dev

在Agda中将构造函数编写为函数的更好方法

来自分类Dev

在Agda中将构造函数编写为函数的更好方法

来自分类Dev

了解Ruby / Rails中的before_save

Related 相关文章

  1. 1

    编写函数以获取具有data属性的所有元素

  2. 2

    在Rails before_save方法中大写多个属性

  3. 3

    Rails:before_save大写私有方法

  4. 4

    处理before_save导轨的智能方法

  5. 5

    具有嵌套属性创建的模型更改了before_validation和before_save之间的关联类型属性

  6. 6

    检查目标方法可以在.Net中抛出的所有可能的异常吗?

  7. 7

    在相关模型中的属性更改后运行before_save

  8. 8

    Idris:是否可以使用“ with”重写所有函数以使用“ case”而不是“ with”?如果没有,您能举个反例吗?

  9. 9

    如何编写新的#%datum函数以捕获所有字符串?

  10. 10

    编写一个递归函数以列出parts.txt的所有路径

  11. 11

    比较字典列表后,编写Python函数以返回与给定输入对应的最大值的更好方法

  12. 12

    很多构造函数参数-有更好的方法吗?

  13. 13

    Python:编写函数以检查列表并返回值或无

  14. 14

    如何编写恒定时间函数以将最高有效位复制到所有位

  15. 15

    编写cypher并获取Java中所有属性的正确方法

  16. 16

    编写cypher并获取Java中所有属性的正确方法

  17. 17

    Rails:`before_save`会干扰`save?`

  18. 18

    有没有更好的方法在F#/ OCaml中编写交换函数?

  19. 19

    有没有更好的方法来编写不断变化的图像函数?

  20. 20

    有没有更好的方法来编写 LINQ 函数?

  21. 21

    有没有更好的方法在 Clojure 中编写这个枢轴函数?

  22. 22

    如何像目标C一样快速地编写吸气剂方法,并且有更好的方法

  23. 23

    如何编写一个异步函数以使用Promise.all从所有.csv文件导入数据?

  24. 24

    编写带有很多||的if语句的更好方法

  25. 25

    在相关模型中更改属性后运行before_save

  26. 26

    “不要问”,不是所有方法都无效吗?

  27. 27

    在Agda中将构造函数编写为函数的更好方法

  28. 28

    在Agda中将构造函数编写为函数的更好方法

  29. 29

    了解Ruby / Rails中的before_save

热门标签

归档