繁体   English   中英

alias_attribute以及使用原始属性名称创建和方法导致循环

[英]alias_attribute and creating and method with the original attribute name causes a loop

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

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只是定义了新方法,它们调用了旧方法

请注意, model.attributemodel.attribute=在ActiveRecord的方法简单地调用read_attributewrite_attribute ,让你随时可以访问自己的属性,即使你忽略它的getter或setter:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM