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はオーバライド前後のメソッドを指定してあげます。