我有一些非常大的模型,我必须迁移到最新版本的Rails。这些模型有很多验证(User
有aprox .50验证)。
是否可以将所有这些验证移到另一个文件中?说app/models/validations/user_validations.rb
。如果有人可以提供一个例子,请吗?
答案 0 :(得分:8)
您可以使用此问题:
# 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关注点(它们有一些您可能不想随身携带的依赖关系管理代码),您可以使用优秀且极小的插件“扩充”或派生的宝石:
https://github.com/chemica/augmentations-gem
这使用了非常相似的语法和更少的代码。它也没有使用术语“关注点”,这可能意味着不同语言/框架的OO术语中的其他内容。