gpt4 book ai didi

ruby-on-rails - alias_attribute 和使用原始属性名称创建方法会导致循环

转载 作者:行者123 更新时间:2023-12-04 06:17:36 25 4
gpt4 key购买 nike

我正在尝试在模型的一个属性中动态创建方法链。现在我已经有了这个功能:

def create_filtered_attribute(attribute_name)
alias_attribute "#{attribute_name}_without_filter", attribute_name

define_method "#{attribute_name}" do
filter_words(self.send("#{attribute_name}_without_filter"))
end
end

所以我收到一个带有属性名称的字符串,将其别名为“_without_filter”(alias_method或alias_method_chain在这里失败,因为创建类时该属性不存在),然后我使用属性名称创建一个新方法,在其中过滤其内容。

但不知何故,当我调用“#{attribute_name}_without_filter”时,它会调用我的新方法(我认为是因为alias_attribute以某种方式),并且程序进入堆栈循环。

我正在尝试重命名该属性,以便我可以将其名称用于方法...

有人可以告诉我这一点吗?

最佳答案

alias_methodalias_attribute 之间存在差异。 alias_method实际上复制了旧方法,而 alias_attribute只是定义了新方法,调用旧方法

请注意,ActiveRecord 中的 model.attributemodel.attribute= 方法只需调用 read_attributewrite_attribute ,因此您始终可以访问您的属性,即使您覆盖了它的 getter 或 setter:

  define_method "#{attribute_name}" do
filter_words(self.read_attribute(attribute_name))
end

关于ruby-on-rails - alias_attribute 和使用原始属性名称创建方法会导致循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924153/

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