目前我將每個選項存儲在它自己的類屬性中,但是當我需要從實例方法訪問傳遞的選項時,這導致難以閱讀代碼。如何從實例方法訪問傳遞給acts_as插件(ActiveRecord裝飾器)的選項?
例如,如果我傳遞列名作爲選項,我必須使用self.send(self.class.path_finder_column)
從實例方法獲取列值。
注意我已經在class屬性前加上了我的插件名稱,以防止名稱衝突。
下面是一個插件的簡單代碼示例,該插件傳遞一個選項column
,然後通過實例方法set_path
訪問該選項。獲取者/設置者是否可以簡化爲更具可讀性?
# usage: path_find :column => 'path'
module PathFinder
def path_finder(options = {})
send :include, InstanceMethods
# Create class attributes for options
self.cattr_accessor :path_finder_column
self.path_finder_column = options[:column]
module InstanceMethods
def set_path
# setter
self.send(self.class.path_finder_column + '=', 'some value')
# getter
self.send(self.class.path_finder_column)
end
end
end
end
ActiveRecord::Base.send :extend, PathFinder
-1:發佈在問題中的代碼已經使用了cattr_accessor。 – EmFi