activerecord
ActiveRecord::Base.connection.execute(sql) 返ってくるのは生のResultSetなので、アプリ側で解釈する必要がある。以下の例ではMySQLの場合。 rs = ActiveRecord::Base.connection.execute("show processlist") puts rs.class #=> Mysql::Result rs.each{|r…
ActiveRecordの==はどう動くのか気になったので調べてみた。 例えばSNSで日記にユーザからコメントがついた場合、新着に表示する時にはまず日記を書いたユーザとコメントを書いたユーザが別かどうかを判定しなきゃいけない。 早速ソースを読む。 def ==(comp…
ARではWhere句を構築するのに結構手間がかかるので、いくつかpluginが公開されている。 http://d.hatena.ne.jp/yukiwata/20070524/1179977530 とは言うものの、どれも機能的には貧弱に見えたのでこれだったら我慢して直で書いちゃおうかな、と思っていたらez…
ARの実装とRuby処理系のTimeに関する実装でハマる - Lazy Technology にも書いたけど、ARはDBMSのカラム情報に基づいて、格納された値を自動的にキャスト(変換)する。 ar = AR.new ar.id = "hoge" => "hoge" ar.id => 0 キャストするのは格納時ではなく出…
http://d.hatena.ne.jp/Rommy/20070514/1179164848 sqlite3を使用したMagic Multi-Connectionsの分かりやすいサンプルコードが合ったのでMySQL版を作ってみた。 ただこれだけじゃ芸がないので、1.http://blog.tkmr.org/tatsuya/show/311-twitter-db-railsで…
コンソールから色々調べたい時には ruby script/console 以下、環境の確認に便利なメソッドたち。 Rails::Info Railsの動作環境を表示。 Welcome aboard画面のリンクやruby script/aboutと同じ結果が返る。 しかしこれ、InfoってModuleクラスなのになんでこ…
ユニットテストがしたくなったのでとりあえずar_fixturesとyaml_wamlをインストールして動かしてみて10分ほど放置。だがまったく終わらない。 インタラプトしてカウンタを仕込んで目検してみるに、どうも秒間5〜6件程度しか処理できていない気がする。 対象…
ActiveRecordでSQLServerからMySQLにデータを移行するスクリプトを書いているときに躓く。 正直全部書ききれないので端折って結論だけ書いてしまう。 Windowsの処理系においてTime.localメソッドはGMTとの時刻差を前提に入れて書いておかないとハマる。 これ…
DBMSのカラムタイプはMigrationで定義している抽象化されたシンボルをキーにした各アダプタで定義されたハッシュから取得しているので、このハッシュに定義されていないもの、例えば add_column(table_name, column_name, "tinyint", options = {}) と言った…
メモ。 By default, the MysqlAdapter will consider all columns of type tinyint(1) as boolean. If you wish to disable this emulation (which was the default behavior in versions 0.13.1 and earlier) you can add the following line to your envir…
created_atやupdated_atは便利なカラムではあるが、データ移行にARを使う時にただデータを移したいだけなのに勝手にデータを更新してしまってちょいありがた迷惑な感じに。 ググってもやり方が出てこなかったのでARのソースをGrepする。 それっぽい箇所がtim…