繁体   English   中英

将Rails引擎功能限制为某个类而不是ActiveRecord :: Base

[英]Restricting Rails engine functionality to a certain class rather than ActiveRecord::Base

我创建了一个Rails引擎,其中包含创建新用户时所需的一些常用功能。 例如,有一个before_validation(on::create)钩子在某些字段中填充某些内容,以确保没有该字段中包含某些内容的用户无法创建。 它看起来类似于:

module OfflineUser 

  extend ActiveSupport::Concern

  included do
    before_validation(on: :create) do
      self.member_number = rand(0..100000)
    end
  end
end
ActiveRecord::Base.send(:include, OfflineUser)

如果我将引擎包含到另一个项目中并执行User.create,它将为我正确填充一个member_number字段。 但是,由于它已将方法添加到ActiveRecord :: Base,因此它还会尝试在我尝试对其运行create的每个模型中填充该字段! 如何将此功能限制为仅用户模型或我选择的其他模型,而不是全局限制在每个模型上。 谢谢。

通过将其包括在特定的类中:

class User < ActiveRecord::Base
  include OfflineUser
end

摆脱掉最后一行,在其中将模块包含在ActiveRecord :: Base中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM