条件を指定して一覧を表示する

ActiveScaffoldこれを使うと簡単にAjaxに対応したページが作成できる。Rails標準のscaffoldのAjax版といったところ。
でも、意外と使われてないのかな。日本語のサイトが少ない。
そして、よく忘れるのでめも。ActiveScaffoldでCRUDのページを作るのはすごく簡単。
コントローラを作ったら以下のようにするだけでよい。(ActiveRecordのUnitモデルがあるとき)

class UnitsController < ApplicationController
  active_scaffold :units
end

と、まぁこれでもいいんだけど。通常は以下のように色々設定をする。

class UnitsController < ApplicationController
  active_scaffold :units do |config|
    
    # 一覧ページに表示するタイトルラベル
    config.label = '部署'
    # 一覧に表示するテーブルの項目
    config.columns = [:code, :name, :name_abbr, :name_kana]
    
    # 各項目の表示名
    columns[:code].label = "コード"
    columns[:name].label = "部署名"
    columns[:name_abbr].label = "部署略称"
    columns[:name_kana].label = "名称カナ"
    
    # 新規作成時に入力できる内容
    config.create.columns = [:code, :name, :name_abbr, :name_kana]
    # 更新時に入力できる内容
    config.update.columns = [:name, :name_abbr, :name_kana]
    
    # 削除リンクを表示させない
    config.delete.link = nil
  end
end

こんな感じで設定してやると、一覧に表示する内容や登録、更新できる内容をカスタマイズできる。
で、通常はテーブルの内容を全て一覧に表示するんだけど、以下のようにすることで条件を指定することができる。(conditions_for_collectionメソッドに注目)

class UnitsController < ApplicationController
  active_scaffold :units do |config|
    # 省略・・・
  end
  
  # 一覧に出てくる部署の条件(集約部署だけ出すようにしている)
  def conditions_for_collection
    ["code like '100%'"]
  end
end

さらに、以下のURLにあるように検索条件をパラメータに渡して動的に変化させることも出来る。
http://wiki.activescaffold.com/wiki/published/Dynamic+conditions_for_collection
今回の例だと、以下のメソッドを追加して、/units/deleted_unitとリクエストを送ると「delete_flg = true」のものだけが検索結果に表示されるようになる(はず)

def deleted_unit
  @condition = ['delete_flg = true']
end