【问题标题】:Restricting Rails engine functionality to a certain class rather than ActiveRecord::Base将 Rails 引擎功能限制为某个类而不是 ActiveRecord::Base
【发布时间】:2014-03-27 21:16:57
【问题描述】:

我创建了一个 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 的每个模型中填充该字段!如何将此功能限制为仅用户模型或我选择的其他模型,而不是在每个模型上全局。谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord rails-engines


    【解决方案1】:

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

    class User < ActiveRecord::Base
      include OfflineUser
    end
    

    去掉在 ActiveRecord::Base 中包含模块的最后一行。

    【讨论】:

    • ... 可以发誓我已经尝试了包含它的每一次迭代,但显然没有做对。完美,谢谢!
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多