2010-05-27 41 views
2

我試圖在我的模型中的一個屬性中動態創建一個方法鏈。 現在我有這樣的功能:alias_attribute和創建和具有原始屬性名稱的方法導致循環

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失敗在這裏,因爲屬性心不是有創建類時), 我創建了一個新的方法,使用屬性名稱來篩選其內容。它調用我的新方法(我認爲是因爲alias_attribute的一些方式),並且程序進入了一個堆棧循環。但是不知何故,當我撥打「#{attribute_name} _without_filter」時,它會調用我的新方法。

我試着去重新命名該屬性,這樣我就可以使用其名稱的方法...

可有人請賜教這一點。

回答

6

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 
+0

有大約alias_method與alias_attribute博客文章及其使用案例:http://www.chrisrolle.com/blog/aliasing-the-rails-way – 2016-02-02 06:21:19

相關問題