タグ

ブックマーク / wota.jp (3)

  • ApplicationModel クラスのススメ (STI との共存) - ヽ( ・∀・)ノくまくまー(2007-09-02)

    Rails で違和感を覚えるのは、モデルにだけアプリケーション層に基底クラスが用意されていない所。違和感の正体はMVCの対称性だけではなく、実際に不便なのだ。ここで言う「アプリケーション層の基底クラス」とは、フレームワークレベルに直接定義するのは気がひけるけど、現在のアプリケーションで自分が定義するクラス全体には影響を与えたいような定義を行うクラスの意。例えば、セッション情報であれば、フレームワークレベルでなく、ApplicationControllerに定義するのが自然だし、現在の ActionPack でもそういう実装になっている。同じことがビュー(ヘルパ)においても可能だが、モデルだけはなぜか ActiveRecord::Base を直接継承しており、これが不便な局面が多々ある。 ApplicationModel 具体的には、既存のNKSKプロジェクトのモデル(クラス群)を別のプロジ

  • ActiveRecord

    Introduction 第1章: for Ruby users (4) ・CRUD operations ・Assocations 第2章: for Rails users (15) ・With Scope ・Scoped Access 第3章: for Rails developers (17) ・Acts As View ・Finder Query CRUD : ActiveRecord Pattern require 'rubygems' require_gem 'activerecord' ActiveRecord::Base.eatablish_connection( :adapter=>"sqlite3", :db=>"db/users.db" ) class Member < ActiveRecord::Base # "members" e

  • ヽ( ・∀・)ノくまくまー(2006-01-05)

    ● [Rails] with_scope (ActiveRecord) ActiveRecord::Base.with_scope(method_scoping = {}) {|| ...} with_scope はテーブル操作の範囲を限定するクラスメソッドです。指定されたブロックを実行する際、xxx_by_sql 以外のテーブル操作用のクラスメソッド全てが引数で指定された制限(影響)を受けます(※1)。 以下のような場面で効果を発揮します。 共通の値を持つ複数アイテムを簡単に初期化したい。 find(params[:id]) で取得したデータが不正アクセスかどうかの検証が面倒だ。 かと言って、find 時に :conditions 指定するのも面倒だ。 さらに、それをCRUD毎に指定するなんて気が遠くなる。 ※1:レシーバと同じクラスのみ影響を受けます。 ● スコープ指定 スコープの種類

  • 1