繁体   English   中英

选择模型的所有当前属性以在Rails中进行验证

[英]Selecting all current attributes of a model for validations in Rails

设置模型时,我经常发现自己在设置某些验证时必须写出其所有属性。 一个常见的例子是当我使用presence参数时:

validates :first_name, :last_name, :username, :email, presence: true

有没有一种聪明的方法可以选择所有属性,而不必像在rails控制台中检索它们一样显式地全部写出它们?

User.columns

并将其作为参数传递给validates方法?

ALL_ATTRIBUTES = User.columns

validates ALL_ATTRIBUTES, presence: true

尝试这样的事情,我得到了这个错误undefined method 'to_sym'

我不会鼓励您或任何人这样做。 原因是当您遇到问题时,由于将来会在一段时间后将新列添加到应用程序中而导致无法保存模型对象并引发错误的情况,您或新开发人员会感到奇怪吗?!!! 。

但是,如果必须这样做,则可以执行以下操作:

validates *self.column_names.map(&:to_sym), presence: true

在这里,Ruby中的*被称为splat运算符这是对&:的解释

这是一个可怕的主意。 但是您可以通过以下方式进行操作:

attrs = column_names.map { |column| column.to_sym }
validates *attrs, presence: true

为什么这是个坏主意? 因为还不清楚正在验证什么。 它使调试变得困难,并可能导致您遇到奇怪的错误。 如果将来添加不需要进行状态验证的列,则会跳闸。 另外,有些事情我不需要出席。 例如,电子邮件字段将需要正则表达式验证,该验证会自动知道空白字符串无效。 因此,状态验证器是多余的。

提防自己太聪明了 ,因为有时候毕竟不是那么聪明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM