首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何将验证与模型分开?

我如何将验证与模型分开?
EN

Stack Overflow用户
提问于 2014-08-14 14:11:43
回答 1查看 901关注 0票数 6

我有一些非常大的模型,我必须迁移到最新版本的Rails。这些模型有相当多的验证(User有很好的证明)。( 50份验证)。

是否可以将所有这些验证移到另一个文件中?说app/models/validations/user_validations.rb吧。如果是的话,谁能举个例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-14 14:19:27

您可以对此使用关注点:

代码语言:javascript
运行
复制
# 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

您可能需要/希望命名您的关注点,这取决于您的自动路径配置:

代码语言:javascript
运行
复制
# 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术语中,它可以表示不同语言/框架的其他含义。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25310264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档