ActiveRecord のアトリビュート
- ActiveRecord::Base#attributes は、クエリの選択列のこと
- ActiveRecord::Base.columns は、マッピングしているスキーマの列のこと
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列)