簡體   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