我有一些非常大的模型,我必须迁移到最新版本的Rails。这些模型有相当多的验证(User
有很好的证明)。( 50份验证)。
是否可以将所有这些验证移到另一个文件中?说app/models/validations/user_validations.rb
吧。如果是的话,谁能举个例子吗?
发布于 2014-08-14 14:19:27
您可以对此使用关注点:
# app/models/validations/user_validations.rb
require 'active_support/concern'
module UserValidations
extend ActiveSupport::Concern
included do
validates :password, presence: true
end
end
# app/models/user.rb
class User
include UserValidations
end
您可能需要/希望命名您的关注点,这取决于您的自动路径配置:
# app/models/validations/user.rb
require 'active_support/concern'
module Validations
module User
...
# app/models/user.rb
class User
include Validations::User
从风格的角度来看,您可能会想一想,为什么您有这么多的验证。将它们分流到一个模块中将精简模型文件,但实际上类仍然随身携带所有这些代码。你实际上是在把问题扫到地毯底下。
您是否使用了许多具有不同验证要求的不同表单?如果是这样的话,您可以使用表单对象(包括ActiveModel功能)封装每个表单所需的验证和处理,从而消除模型的压力。
你的模特有很多疯狂的领域吗?也许您的用户对象需要由较小的对象组成,如配置文件、地址、化身等。
当然,这超出了版本迁移的范围!
如果您不能或不想使用ActiveRecord关注点(它有一些您可能不想携带的依赖管理代码),您可以使用优秀的、微小的插件“增强”或派生的gem:
https://github.com/chemica/augmentations-gem
这使用了非常相似的语法和更少的代码。它也没有使用“关注点”这个术语,在OO术语中,它可以表示不同语言/框架的其他含义。
https://stackoverflow.com/questions/25310264
复制相似问题