ما هي أفضل طريقة لإجراء اتصالات قاعدة بيانات لكل مستخدم في ريلز؟
-
09-06-2019 - |
سؤال
ما هي أفضل طريقة لإجراء اتصالات قاعدة بيانات لكل مستخدم في Rails
?
أدرك أن هذه ممارسة سيئة في تصميم Rails، ولكننا نستبدل تدريجيًا تطبيق ويب موجود يستخدم قاعدة بيانات واحدة لكل مستخدم.إعادة التصميم/إعادة الكتابة الكاملة غير ممكنة.
المحلول
ضع شيئًا كهذا في وحدة تحكم التطبيق لديك.أنا أستخدم النطاق الفرعي بالإضافة إلى "_clientdb" لاختيار اسم قاعدة البيانات.لدي جميع قواعد البيانات التي تستخدم نفس اسم المستخدم وكلمة المرور، لذا يمكنني الحصول عليها من ملف تكوين db.
أتمنى أن يساعدك هذا!
class ApplicationController < ActionController::Base
before_filter :hijack_db
def hijack_db
db_name = request.subdomains.first + "_clientdb"
# lets manually connect to the proper db
ActiveRecord::Base.establish_connection(
:adapter => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['adapter'],
:host => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['host'],
:username => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['username'],
:password => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['password'],
:database => db_name
)
end
end
نصائح أخرى
نلقي نظرة على ActiveRecord::Base.found_connection.هذه هي الطريقة التي تتصل بها بخادم قاعدة بيانات مختلف.لا يمكنني تقديم المزيد من المساعدة لأنني لا أعرف كيفية التعرف على المستخدم أو تعيينه إلى قاعدة البيانات الخاصة به، ولكن أفترض أن قاعدة البيانات الرئيسية ستحتوي على تلك المعلومات (ويجب أن تكون معلومات الاتصال في ملف قاعدة البيانات.yml) ).
حظا سعيدا.