[rails] Magic Multi-Connections

http://magicmodels.rubyforge.org/magic_multi_connections/

via Matzにっき

これはよさげ。なるほど。

サイトにあるデモシナリオだけでも面白そうなんですが、これのポイントは接続先 DB の切替えを before_filter でやってるということも。
つまり action ごとに自動的に接続先 DB を変えたりすることもできそうです。

まぁ自動的に割り振るとかはかっこいいけどいろいろアレなんで、こんな感じ?

class Person
  def show
    @earson = Person.find(params[:id])
  end

  def create
    person = WriteDatabase::Person.new(params[:person])
	if person.save
	  redirect_to ..
	else
	  ..
	end
  end
end

気になってること

  • association の扱いがどうなっているか
    • この例で言えば Private のときに association はちゃんと辿れるか?
  • ネストしたクラス名に対応できるんだろうか?
  • ほんとにアクションごとに変えられるか?
    • たぶん、リードとライトを別 DB にするとかも同じ原理でできるんだろうけど、
    • before_filter :read_only_access, :except => %w(create update) とか?
class Person
  before_filter :write_access, :only => %w(create)
  def show
    @earson = Person.find(params[:id])
  end

  def create
    Person.create(params[:person])
  end

  protected
  def write_access
    self.extend(WriteDatabase)
  end
end