เกิ่นนำซักเล็กน้อยแล้วกัน…
ทำงานใช้ ROR มาได้ซักพัก ได้ทำ Project GSMIS ของบัณฑิตวิทยาลัย มหาวิทยาลัยขอนแก่น
โอ้ววว…!!!!!!!! เจออะไรที่ต้อง research เยอะมาก
เรื่องแรกเลย…ฐานข้อมูลเราไม่มีข้อมูลที่เก็บไว้เอง ต้อง import
ก่อนหน้านี้ Project นี้ผ่านมือพี่คนอื่นมาก่อนก่อนจะมาถึงเรา
ตอนนั้น…ทุกคนยังใหม่กับ ROR เลยใช้วิธี import จาก Excel ได้ผลดีในระดับ
มีข้อเสียคือเปลืองเวลาคนมานั่ง upload file
และแล้ว GSMIS ก็ได้เริ่มนับหนึ่งใหม่อีกครั้ง ทำให้ได้ทำ research เรื่องแรก คือ
“Multiple Database connection on Rails”
หลังจากเขียนน้ำมาเยอะ มาจริงจักกันได้แล้ว
ถ้าเราจำเป็นต้องใช้ Database มากกว่า 1 ตัว ใน 1 Project
ขั้นแรก…แก้ config ที่ไฟล์ config/database.yml
ก่อนแก้ config/database.yml
# Default
defaults: &defaults
adapter: postgresql
encoding: unicode
host: localhost
database: databasename
username: username
password: password
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
ตามข้างบน ก็จะเป็นปกติที่เราใช้ๆ กัน คือ connect ไปที่ database เดียว ต่อไปจะเป็น code หลังจากแก้ไข
แก้ไขแล้ว config/database.yml
# Default
defaults: &defaults
adapter: postgresql
encoding: unicode
host: localhost
database: databasename
username: username
password: password
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
# Database ที่ N
default_Ns: &default_Ns
adapter: postgresql
encoding: unicode
host: localhost
database: databasename_N
username: username_N
password: password_N
prefixN_development:
<<: *default_Ns
prefixN_test:
<<: *default_Ns
prefixN_production:
<<: *default_Ns
พอแก้ไข config/database.yml แล้ว ยังไม่สามารถใช้ได้ ยังต้องไปแก้อีกไฟล์
เอ้ยยย..ไม่สิ เรียกว่า เขียน code เพิ่มดีกว่า
ไฟล์ที่จะไปเขียน code เพิ่มก็คือ … ไฟล์ controller ไหนก็ได้
แต่จะพาเขียนไว้ที่ app/controllers/application.rb (คงรู้นะว่าทำไม ถึงเขียนไว้ที่นี่)
class ApplicationController < ActionController::Base
before_filter :set_N_db_connection
def set_N_db_connection
# extra_coord = YAML.load(File.open(File.join(RAILS_ROOT, PATH_FILE_CONFIG),"r"))[PREFIX_CONNECTION+ ENV['RAILS_ENV']]
extra_coord = YAML.load(File.open(File.join(RAILS_ROOT,"config/database.yml"),"r"))[,"prefixN_"+ ENV['RAILS_ENV']]
# MODEL_CLASS_NAME.establish_connection(extra_coord)
TableName.establish_connection(extra_coord)
end
end
TableName คืออะไร มันก็คือ class name ของ model นั่นเอง
เพราะฉะนั้น เราก็ต้องมี model TableName (app/model/table_name.rb) ด้วย
เท่านี้ก็เรียบร้อย