【问题标题】:Rails, DRY default validator for string length?Rails,DRY字符串长度的默认验证器?
【发布时间】:2013-12-18 19:17:26
【问题描述】:

所以我遇到了一个问题,长度错误是 rails 异常,因为模型上没有长度验证。

我知道我可以通过使用在我的字符串上放置一个长度验证器

validates :blah, length: { maximum: 255 }

但是我的大多数字符串都使用默认大小 255,所以我不得不在很多地方重复这个验证。

是否有一种 DRY 方法可以在所有字符串上放置一个默认验证器以验证默认数据库长度 255?

【问题讨论】:

  • 有办法让validates 假设length: { maximum: 255 } 默认值会有所帮助吗?
  • 如果是这样,请参阅刚刚发布的答案。 :-)

标签: ruby-on-rails validation ruby-on-rails-4


【解决方案1】:

gem schema_validations (https://github.com/SchemaPlus/schema_validations) 可以满足您的需求。

根据数据库架构自动创建验证。

它检查数据库并根据架构自动创建验证。安装后,您的模型就非常简单了。

class User < ActiveRecord::Base
end

验证是存在的,但它们是由后台的 schema_validations 创建的。

【讨论】:

  • 除非您手动指定 :limit,否则该 gem 似乎并未实际验证字段最大值。
  • 添加此gem后,需要重启应用,否则无法使用。
【解决方案2】:

这可能不是您正在寻找的答案,但如果您向验证器添加多个字段,那么您并没有真正重复验证器,而且对我来说似乎相当干燥。

validates :foo, :bar, :baz, length: { maximum: 255 }

【讨论】:

  • 这适用于单个模型中的字段,但不适用于所有模型。这比每行都有一个验证器要好。
  • 这就是我最终的结果,遗憾的是没有 DRYer 方法可以做到这一点,但现在这很好。
【解决方案3】:
class ModelName < ActiveRecord::Base
  validates :name, length: { maximum: 255 }
end

然后通过键入来使用它

ModelName.validators

【讨论】:

  • 我不明白你在这里的意思,你能提供更多信息吗?
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多