ActiveRecord のアトリビュート

create table my_hoges (
  id  int  not null auto_increment,
  aaa varchar(30) not null,
  bbb varchar(30) not null,
  primary key (id)
);
class MyHoge < ActiveRecord::Base
end

hoge = MyHoge.find_by_sql("select id, aaa, bbb, '' as ccc from my_hoges where id = 1")[0]
hoge.attribute_names # => ["aaa", "bbb", "ccc", "id"]
MyHoge.columns.map {|column| column.name} # => ["id", "aaa", "bbb"]

ActiveRecord::Base#column_for_attribute が nil であるようなアトリビュート(ccc)は、save されない。

class MyHoge < ActvieRecord::Base
  attr_accessor :ddd
  validates_acceptance_of :eee
end

↑ attr_accessor や validates_〜 などで定義された普通の(?)アトリビュート(ddd, eee)は、
ActiveRecord::Base#attributes には含まれない。
また、普通のアトリビュートActiveRecordアトリビュートは別物だが、
newメソッドでは同じようにハッシュで初期化ができる。

class MyHoge < ActiveRecord::Base
  def aaa
    read_attribute :aaa
  end
  def aaa=(val)
    write_attrbiute :aaa, val
  end
end

↑ read_attribute, write_attribute を使って、ActiveRecordアトリビュートのアクセッサを
オーバーライドできる(Facade列)