[英]Where is “class Session < ActiveRecord::Base” in rails 3
[英]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.