[英]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'
这是一个可怕的主意。 但是您可以通过以下方式进行操作:
attrs = column_names.map { |column| column.to_sym }
validates *attrs, presence: true
为什么这是个坏主意? 因为还不清楚正在验证什么。 它使调试变得困难,并可能导致您遇到奇怪的错误。 如果将来添加不需要进行状态验证的列,则会跳闸。 另外,有些事情我不需要出席。 例如,电子邮件字段将需要正则表达式验证,该验证会自动知道空白字符串无效。 因此,状态验证器是多余的。
提防自己太聪明了 ,因为有时候毕竟不是那么聪明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.