条件を指定して一覧を表示する
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