Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将验证与模型分开_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何将验证与模型分开

Ruby on rails 如何将验证与模型分开,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一些非常大的模型,我必须迁移到最新版本的Rails。这些模型有很多验证(User有大约50个验证) 是否可以将所有这些验证移到另一个文件中?说app/models/validations/user\u validations.rb。如果是,有人能提供一个例子吗?您可以使用关注点: # app/models/validations/user_validations.rb require 'active_support/concern' module UserValidations ex

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


是否可以将所有这些验证移到另一个文件中?说
app/models/validations/user\u validations.rb
。如果是,有人能提供一个例子吗?

您可以使用关注点:

# 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:


这使用了非常相似的语法和少得多的代码。它也没有使用“关注点”这个术语,这在不同语言/框架的OO术语中可能意味着其他一些东西。

它们很方便,但更有用的是,它们被认为是潜在形成新类的垫脚石,而不是其本身的目的。它们对于在模型之间共享行为也很有用,但需要注意的是,这些模型有大量的字段,大多数字段都是不相关的,这就是为什么有这么多验证。谢谢你的及时回复!!