[英]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_method
和alias_attribute
之間有區別。 alias_method實際上是舊方法的副本 ,而alias_attribute只是定義了新方法,它們調用了舊方法 。
請注意, model.attribute
和model.attribute=
在ActiveRecord的方法簡單地調用read_attribute和write_attribute ,讓你隨時可以訪問自己的屬性,即使你忽略它的getter或setter:
define_method "#{attribute_name}" do
filter_words(self.read_attribute(attribute_name))
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.