おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

database.ymlにERBが使えます&alias_method_chain

 今日は仕事でdatabase.ymlにERBが使えることを教えてもらった。

<% require '/etc/rails/conf/conf.rb ' %>  
 
development:  
  adapter: <%= config.db_adpter %>  
  database: <%= config.db_name %>  
  username: <%= config.username %>  
  password: <%= config.password %>  
  socket: <%= config.db_socket %>  
...  
(略)  

としてあげて、conf.rbには

def config  
  Class.new do  
    def db_adpter; 'mysql' end  
    def db_name; 'sample_development' end  
    def username; 'test' end  
    def password; 'test_pass' end  
    def db_socket; '/var/run/mysqld/mysqld.sock'  
  end.new  
end  

としてあげるとOK。
今まではひとりで開発していたのでそれほど気にしていなかったけど、こういうやり方をすればどんな環境でもdatabase.ymlを変更する必要がないですね。

 Railsでメソッドをオーバライドするときはalias_method_chainという機能が便利。

class Tsukasa  
  def like  
    'バイク'  
  end  
end  

これに、事前に標準入力を受け付ける処理を追加してオーバライドします。

class Tsukasa  
  def like_with_question  
    puts "言葉を入力してください"  
    if gets == 'nsr'  
      like_without_question  
    else  
      puts "バイクじゃない"  
    end  
  end  
  alias_method_chain :like, :question  
end  

like_with_questionがlikeメソッドをオーバーライドするもので、like_without_questionががオーバライド前のメソッドを呼び出します。継承だったらsuperとか使えるだろうけど……。alias_mehod_chanはオーバライド前後のメソッドを指定してあげます。