有効なユーザーだけをfindするメソッドfind_activeを定義してみる
モデルが以下のようになっていて、削除フラグと未表示フラグの2つがあるとします。
class CreateUsers < ActiveRecord::Migration def self.up create_table "users", :force => true do |t| t.column :login, :string t.column :email, :string t.column :age, :integer t.column :deleted, :boolean, :default => false t.column :hidden, :boolean, :default => false end end def self.down drop_table "users" end end
こんな感じのときに有効なユーザーの一覧を出すには
users=User.find(:all,:conditions=>["deleted = ? and hidden = ?",false,false])
とかってやりますよね。
んで、いちいち:conditionsを書くのはやってらんねーって人は
User.with_scope(:find=>{:conditions=>["deleted = ? and hidden = ?",false,false]}) do users=User.find(:all) end
とかって書くわけです。
んでも、私はwith_scopeすら書きたくないのです。
findの代わりにfind_activeを使いたいのです。
それで、定義
class User < ActiveRecord::Base def self.find_active(*value) User.with_scope(:find=>{:conditions=>["deleted = ? and hidden = ?",false,false]}) do User.find(*value) end end end
このように定義しておくと、
users=User.find_active(:all) users=User.find_active(:all,:conditions=>["age = 30"]) user=User.find_active(:first,:conditions=>["login = taro"])
というふうにfindと同じオプションが使えてしまいます。
使いやすいですね。