2011-09-15 46 views
0

我正在使用一個公共站點和管理站點的Web應用程序。他們都共享一張桌子:用戶,其模型在公共場所。我怎樣才能與管理員應用程序分享這張桌子?如何在兩個獨立的ruby on rails應用程序之間共享表?

+2

你應該簡單地配置你的'database.yml'文件來連接到同一個數據庫。我會質疑你的設計決定,將它分成兩個不同的應用程序。 – basicxman

+0

好吧,我如何配置database.yml文件連接到另一個應用程序中的表? –

回答

3

如果我是你,我不會分開公共和管理功能。相反,將它們作爲同一站點的一部分來構建,只需命名空間管理路線並通過類似CanCan(儘管您也可以很容易地手動推出解決方案)來控制訪問管理功能的人員。

如果您無法做到這一點,那麼您可以在管理站點中創建一個重複的用戶模型,並覆蓋該模型的連接以指向您的公共數據庫。因此,在您config/database.yml,你需要添加一個數據庫配置爲您的公共數據庫:

public_production: 
    adapter: postgresql 
    database: public_production 
    username: blah 
    password: 
    host: localhost 

#this is your existing production db 
production: 
    adapter: postgresql 
    database: admin_production 
    username: blah 
    password: 
    host: localhost 
在您的管理網站的重複的用戶模型

然後:

class User < ActiveRecord::Base 
    establish_connection "public_#{RAILS_ENV}" 
end 

你重複的模式現在將拉動數據來自您的公共數據庫。您還可能需要在自己database.yml如定義developmenttest版本的公共數據庫:

public_development: 
    adapter: postgresql 
    database: public_development 
    username: blah 
    password: 
    host: localhost 

如果你不想複製你的用戶模型,您可以將其拉出到一個單獨的創業板使那個寶石成爲一個Rails引擎。然後,您將能夠將該寶石納入您的公共和管理站點,並讓這兩種模型都可用。但是,如果您以這種方式執行操作,則需要在公共和管理員項目中都有額外的數據庫定義(因爲用戶模型仍然需要establish_connection位)。

0

您可以在模型的頂部創建一個RESTful web服務,並從另一個應用程序調用此服務。 或者您可以使用您從其他應用程序調用的此類服務構建單獨的用戶應用程序。

要深入瞭解這種設計,我推薦Paul Dix的書Service-Oriented Design with Ruby and Rails

0

創建兩個不同的數據庫可能很麻煩。 (例如,當您在heroku上託管您的應用程序時)。 你可以在一個唯一的數據庫中做同樣的事情。

讓我們來想象我有兩個應用一& B.

對於每一個你定義的database.yml指向同一個數據庫。

然後在application.rb中的每個項目,添加

config.active_record.table_name_prefix = "a_" 

,並分別應用B

config.active_record.table_name_prefix = "b_" 

所有表都將有一個前綴。 例如:

a_posts 
b_transactions 

如果你想要的應用程序B來訪問的例子中,用戶表中創建一個表,

class User < ActiveRecord::Base 
    self.table_name = "a_users" 
end 

它的工作原理就像一個魅力。

相關問題