gpt4 book ai didi

ruby-on-rails - 在 Rails 模型中重新定义 gem 方法不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:40 25 4
gpt4 key购买 nike

所以我有一个 gem,其中包含一些被我们平台上的多个应用程序使用的 activerecord 模型。我们有一个常量来定义“类型”列表,该列表在几个不同的应用程序中是不同的。

# in the gem
class MyModel < ActiveRecord::Base
TYPES = ["A Type", "Another Type"]
end

在应用程序代码中重新定义此常量将为已初始化的常量生成警告。因此,由于它不是真正的常量,我决定将其重构为类方法。

# gem
class MyModel < ActiveRecord::Base
def self.types
[]
end
end

# application a
class MyModel < ActiveRecord::Base
def self.types
["A Type", "D Type"]
end
end

# application b
class MyModel < ActiveRecord::Base
def self.types
["B Type", "C Type"]
end
end

但是,当在 App A 或 B 中访问 MyModel.types 时,types 是 []。这个问题以及其他一些问题使我得出结论,即在加载 Rails 应用程序之后加载了 gem,而我的假设恰恰相反。

处理这种不同情况的最佳方法是什么?

最佳答案

在你的应用程序中这样做

在您的 config/initializers/ 中创建一个文件,并将此代码添加到您的两个应用中

MyModel.instance_eval do
def types
["A Type", "D Type"]
end
end

MyModel.class_eval do
def self.types
["A Type", "D Type"]
end
end

关于ruby-on-rails - 在 Rails 模型中重新定义 gem 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077750/

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