gpt4 book ai didi

ruby-on-rails - 在混合/模块中覆盖模型的属性访问器

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:48 26 4
gpt4 key购买 nike

我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。

例如:

class Blah < ActiveRecord::Base
include GnarlyFeatures
# database field: name
end

module GnarlyFeatures
def name=(value)
write_attribute :name, "Your New Name"
end
end

这显然行不通。有什么想法可以实现吗?

最佳答案

您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。

如果我没记错的话,Rails 使用#method_missing 作为属性 setter ,因此您的模块将优先,阻止 ActiveRecord 的 setter 。

如果您正在使用 ActiveSupport::Concern(参见 this blog post),那么您的实例方法需要进入一个特殊的模块:

class Blah < ActiveRecord::Base
include GnarlyFeatures
# database field: name
end

module GnarlyFeatures
extend ActiveSupport::Concern

included do
def name=(value)
write_attribute :name, value
end
end
end

关于ruby-on-rails - 在混合/模块中覆盖模型的属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436700/

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