タグ

ブックマーク / tashen.hatenadiary.org (2)

  • (Ruby) Module の include で クラスメソッドを追加する方法 - tashenの日記

    Rails や添付ライブラリ等で利用されているテクニック。 何かのクラスにある性質を追加したい場合、モジュールの include を行うわけです(代表例:include Enumberable)。 素直にモジュール定義をして、クラス定義側で include するだけだと、インスタンスメソッド等はクラス側に追加されますが、include したクラスのクラスメソッドを追加することはできません。 でもこれでは足りなくて、クラスメソッドを拡張したい場合があります。これは Ruby のメタプログラミング機能を利用して可能です。 実際に、ActiveRecordの基礎クラスである ActiveRecord::Base には最低限のクラスメソッド、インスタンスメソッドしか定義されていません。バリデーションに利用されている validates_length_of 等のクラスメソッドは ActiveReco

    (Ruby) Module の include で クラスメソッドを追加する方法 - tashenの日記
  • 観察から知る Rails3 ActiveRecord + Arel の特徴と使い方 - tashenの日記

    Rails 3 になって Active Record に Arel という機構が適用された。これを利用することで、Active Record のサブクラスに対してメソッドチェインのようにSQLクエリを構成し、発行することができる。*1 例えば以下のようにクエリを構成できる。 ruby-1.9.2-p0 > Person.where('age > ?', 10) => [#<Person id:1, name:"taro", age:24>, #<Person id:2, name:"jiro", age:13>]そしてメソッドチェインによって検索条件を追加。 ruby-1.9.2-p0 > Person.where('age > ?', 10).where('age < ?', 20) => [#<Person id:2, name:"jiro", age:13>]to_sql によって利

    観察から知る Rails3 ActiveRecord + Arel の特徴と使い方 - tashenの日記
  • 1