gpt4 book ai didi

ruby-on-rails - ActiveRecord (Rails) 中的层父类(super class)型

转载 作者:行者123 更新时间:2023-12-04 05:52:42 25 4
gpt4 key购买 nike

我正在开发一个 Ruby on Rails 应用程序,我希望能够在每次保存之前对每个 AR 对象执行一个方法。

我想我应该创建一个像这样的层 super 类型:

MyObject << DomainObject << ActiveRecord::Base

并用我的特殊方法在DomainObject中放入一个回调(before_save)(基本上从对象的字符串属性中删除所有标签,如“H1”)。

问题是 Rails 要求提供 domain_object 表,而我显然没有。

我的第二次尝试是对事件记录进行猴子补丁,如下所示:

module ActiveRecord
class Base
def my_method .... end
end
end

并将其放在 lib 文件夹下。

这不起作用,它告诉我 my_method 未定义。

有什么想法吗?

最佳答案

尝试为您的域对象使用抽象类。

class DomainObject < ActiveRecord::Base
self.abstract_class = true
# your stuff goes here
end

使用抽象类,您将创建一个不能包含对象(无法实例化)并且没有关联表的模型。

来自阅读Rails: Where to put the 'other' files来自严格无类型,

Files in lib are not loaded when Rails starts. Rails has overridden both Class.const_missing and Module.const_missing to dynamically load the file based on the class name. In fact, this is exactly how Rails loads your models and controllers.

因此将文件放在 lib 文件夹中,Rails 启动时不会运行它,也不会猴子修补 ActiveRecord::Base。您可以将该文件放在 config/initializers 中,但我认为还有更好的选择。

关于ruby-on-rails - ActiveRecord (Rails) 中的层父类(super class)型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com