2011-08-10 60 views
0

我有問題使用table_name_prefix在我的項目上。我的項目中有一個主要的應用程序,其他應用程序是插件,這些插件就像主應用程序中的子系統一樣工作。Rails 3插件 - 活動記錄table_name_prefix

要組織我想用的ActiveRecord插件的table_name_prefix對子系統的數據庫中的表。

如果我把init.rb插件命令的config.active_record.table_name_prefix =「PER_」主應用程序將無法正常工作,因爲ActiveRecord的將試圖找到「per_users」但我唯一想要的是隻有我的主應用程序上的插件使用前綴「per_」。

我試圖用上面的命令在我的插件上創建一個rails文件夾,但是同樣的問題發生,所有的應用程序都試圖找到前綴表名。

另一種方法是在插件模型中使用set_table_name,但它不適合我,因爲我開發子系統作爲rails插件,我不想在將子系統放在主應用程序時更改模型。

有人可以幫助我嗎?

+0

您使用的是什麼版本的導軌? – Rob

回答

2

要與自己的前綴每個插件,爲Rails 3,儘量安排你的模型裏面的插件命名空間:

class Foo::Bar < ActiveRecord::Base 
... 
end 

module Foo 
    def self.table_name_prefix 
    'foo_' 
    end 
end 

這將工作只是插件裏面無主應用程序中進行任何更改。 另一種方法是使用一些主力機型,並繼承它從別人那樣:

class Foo < ActiveRecord::Base 
    def self.table_name_prefix 
    'foo_' 
    end 
end 

class Bar < Foo 
... 
end 

有時這種方法被用於所有型號與額外的功能擴展。在Rails文檔here

0

更多信息,看看this question。我遇到了同樣的問題,忘記了我的應用程序的名稱(主模塊)與我的模型名稱空間具有相同的名稱。