概要
scopeでModelに検索条件を定義
内容
scopeを利用して、Modelによく利用する検索条件を定義することができます。
scope(スコープ名, 条件式)
scopeメソッドはチェーンして流れるようなインターフェースで利用することも可能です。
サンプル
ユーザーの検索条件をスコープとして登録
Model(Scope定義部のみ抜粋)
scope :login_is, lambda {|login|where("login like ?", "%#{login}%")} scope :name_is, lambda {|name|where("name like ?", "%#{name}%")} scope :email_is, lambda {|email|where("email like ?", "%#{email}%")}
これで、ログイン・名前・Emailの項目を組み合わせてAND条件のlike検索が可能になりました。
呼び出し例
View(検索入力部のみ抜粋)
= form_for @user, :url => {:action => "search"} do |user| %table{:class => 'user_search'} %tr %td =label_tag 'login', tara('user', 'login') %td =text_field :user, :login %tr %td =label_tag 'name', tara('user', 'name') %td =text_field :user, :name %tr %td =label_tag 'email', tara('user', 'email') %td =text_field :user, :email =link_to_submit "検索", "icon-search" =link_to_clear "クリア", "icon-eraser" %hr/
Controller(検索関連部のみ抜粋)
class UserController < ApplicationController # 他の処理 def search @user ||= User.new @user.name = params[:user][:name] @user.login = params[:user][:login] @user.email = params[:user][:email] @users = User.login_is(params[:user][:login]).name_is(params[:user][:name]).email_is(params[:user][:email]) render_partial menu_display: true, message_display: true return render :action => 'list' end # 他の処理 end