interlude

プログラミングや私的なこと

ActiveRecordをちまちまと読みます その1

はじめに

こんにちは!貧弱スキルなRailsエンジニアです。 ロクにSQLも書けない私がDBをよしなに出来るのも、ひとえにActiveRecord様のおかげであります。しかし普段お世話になっておきながら実は仕組みがあまり良くわかっていない・・。用法、用量を知らなければ使いこなすことは出来ないでしょう。 と、いうことでActiveRecordを深く知るためにソースを少しずつ読んで行こうと思います。

最初の1歩

早速Githubrailsリポジトリを見てみます。

github.com

この大量のフォルダ群のどこから見ていけばいいのか分からず心が折れそうです。 しかし気を取り直します。 ActiveRecordと言えば、modelのトップでBaseを継承してるのでbaseから見ていこうと思います。

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/base.rb

yaml、active_support、active_record内のファイルをrequireしていますね。さらにその下にいくと軽くAcitiveRecordについての説明が書いてあります。英語で心が折れそうになります。こんなときはGoogle先生に翻訳してもらいます。

28-34行目までの訳(Google翻訳そのまま)。

Active Recordオブジェクトは、その属性を直接指定するのではなく、
それらがリンクされているテーブル定義 属性の追加、削除、および変更
そのタイプはデータベースで直接行われます。 変更は即座に
アクティブレコードオブジェクト。 特定のActive Recordクラスを特定のActive Recordクラスにバインドするマッピング
ほとんどの一般的なケースで自動的にデータベーステーブルが作成されますが、珍しいデータベーステーブルは上書きされる可能性があります。
より多くの洞察を得るには、table_nameのマッピング規則とlink:files / activerecord / README_rdoc.htmlの完全な例を参照してください。

ちなみに原文

Active Record objects don't specify their attributes directly, but rather infer them from
the table definition with which they're linked. Adding, removing, and changing attributes
and their type is done directly in the database. Any change is instantly reflected in the
Active Record objects. The mapping that binds a given Active Record class to a certain
database table will happen automatically in most common cases, but can be overwritten for the uncommon ones.
 See the mapping rules in table_name and the full example in link:files/activerecord/README_rdoc.html for more insight.

すごい!読める!珍しいデータベーステーブルってなんだろう。base.rbを読んだら次はREADME_rdocを見てみたいと思います。

さらに説明が下に続きますが本日はここまで。