2012-11-07 71 views
4

我想創建一個定製的ActiveRecord :: Base,其中包含有關連接的其他元數據。我看到兩種方法可以解決這個問題:如何添加方法到ActiveRecord :: Base?

1.)從ActiveRecord :: Base繼承並在此子類中添加方法&字段。

2)概括了我自己的類

1內一個ActiveRecord :: Base的對象有各種各樣的問題與無法初始化覆蓋,奇怪的問題,它似乎不能有自定義的方法我已經添加等

undefined method `set_profile' for #<Class:0xf041f0> 

2我一直無法弄清楚,由於與使用ActiveRecord :: Base.new問題

我試圖讓一個通用的ActiveRecord類,我可以動態建立連接& set_table_name on,(即沒有這個ActiveRecord :: Base代表的一個底層表),但我似乎無法找到一種方法來實現它。有任何想法嗎?

這工作:

class MyTable < ActiveRecord::Base 
    establish_connection $config['custom-db-config']; 
    set_table_name 'MY_TABLE' 
    end 

,但我需要一個類,我可以呼籲反覆這些東西。

回答

3

不完全確定你爲什麼要這樣做,但也許你可以試試嗎?

module ActiveRecord 
    class Base 
    def self.your_method 
     # implementation goes here 
    end 
    end 
end 

您需要保存該文件並將其保存在config/intializers中。

+1

這工作馬上蝙蝠,謝謝。爲了給你更多的上下文,我正在寫一個數據倉庫的接口,所以我需要一個數據源Profile類,我可以使用database.yml中的配置和一個表名來初始化它。這工作正常(如我的原始示例),我試圖建立一個通用的類,而不是必須指定每個database_config /表作爲硬編碼的類。 如果您有任何其他(更好/更清潔)的方法來處理這種情況,我很樂意聽到它。 – sands

0

您還可以擴展ActiveRecord :: Base類,以便動態添加這些方法,這些方法可以通過繼承ActiveRecord :: Base的類直接調用......許多acts_as插件是根據這種做法定義和制定的。 ..

+0

你有沒有例子說明這種方法的代碼是如何與上述不同的方法?我試過配置文件 sands

+0

我最想做的事情之一是通過調用像Warehouse :: Profile.new(其中Profile像前面的註釋一樣)來初始化ActiveRecord :: Base的實例,但是我無法阻止它嘗試執行它的魔力(即尋找一個名爲'profiles'的表格)。 想知道acts_as的模式到底是什麼。 – sands

相關問題