2012-04-04 5 views
2

Sagen wir, ich habe App. 'A' in Rails3.2 geschrieben, und es gibt eine andere App. 'B' auch Rails, wo ich eine sqlite3 db habe, die Benutzer [user_d, value] -Tabelle enthält, was ich will ist: Ich möchte einige Informationen aus der App suchen. 'A' mit der Benutzer-ID, die in App ist. "B".Wie benutzt man die "A" Rails App? Datenbank von 'B' App

PLZ. Hilfe

Antwort

2

Sie müssen die Verbindung der Sitzung definieren auf den Tisch Punkt B

connection_to_b = ActiveRecord::Base.establish_connection(
    :adapter => "sqlite3", 
    :database => "db/somedatabase.sqlite3" 
) 

ActiveRecord::SessionStore::Session.connection = connection_to_b.connection 

Sie die Tabelle definieren können Sie auch wollen:

ActiveRecord::SessionStore::Session.table_name = 'my_session_table' 
+0

was ist, wenn ich sqlite3 anstelle von mysql verwenden möchte, wie kann ich den Pfad anzeigen? –

+0

und auch eine Notiz, in meinem Fall Sessions-Tabelle ist nicht über die Sitzung, es ist nur separate Tabelle –

+0

Sie müssen nur die Parameter, die Sie wollen in Ihrer Etablish_connection definieren. Ich mache ein Beispiel. nicht zu deinem Fall. Ich bearbeite meine Frage, um die Tabelle zu reparieren, die Sie auch wünschen. – shingara

0

Wenn Sie mit Rails 4 und Mit Authlogic können Sie diese Lösung in App B verwenden, um Benutzersitzungen und Benutzer freizugeben, vorausgesetzt, Sie teilen Datenbankverbindungen zwischen den beiden Apps (App A und App B). in diesem Beispiel der Code geht alles innerhalb App B.

# app/models/user_session.rb 
class UserSession < Authlogic::Base 
    ActiveRecord::Base.establish_connection(
     adapter: 'postgresql', # or 'sqlite3' if you prefer 
     database: "db/app_a_#{Rails.env}" 
) 
    # You may also need/wish for these: 
    logout_on_timeout true 
    consecutive_failed_logins_limit 10 
    authenticate_with User 
end 

Und, müssen Sie dies:

# config/application.rb - bottom of the file, after the final 'end' 
ActionDispatch::Session::ActiveRecordStore.session_class = UserSession 

In App B, werden Sie ein User-Modell benötigen, die verdrahtet ist sprechen Datenbank auf die users Tabelle in Anhang A der:

# app/models/user.rb 
class User < ActiveRecord::Base 
    establish_connection "app_a_#{Rails.env}".to_sym 

    # ... whatever else you wish to include in your User model 
end 

Und schließlich, um Ihnen zu zeigen, wie das letzte Stück des Puzzles zusammen passt, ist hier eine Probe database.yml Datei für App B (Anmerkung: dies alles Datei geht in a pp B):

# config/database.yml 
default: &default 
    adapter: postgresql # or sqlite3 
    encoding: unicode 
    host: localhost 
    pool: 5 
    timeout: 5000 

# Database for app B 
development: 
    <<: *default 
    database: db/app_b_development 

test: 
    <<: *default 
    database: db/app_b_test 

production: 
    <<: *default 
    database: db/app_b_production 

# App A's database (containing users and sessions) 
app_a_development: 
    <<: *default 
    database: db/app_a_development 

app_a_test: 
    <<: *default 
    database: db/app_a_test 

app_a_production: 
    <<: *default 
    database: db/app_a_production 

HTH jemand! :)