ActiveScaffoldのインストール方法や利用方法は検索すればすぐわかると思いますので割愛します。
そんなActiveScaffoldで特定のカラムにsessionに格納されているデータを利用して格納する場合です。
ある情報を誰が作成更新したかなどをsessionに格納しているlogin情報などを利用して更新する場合などを想定しています。
仮に以下のようなtestsテーブルがあるとします。
id data data2 recorder create_at updated_atこのrecorder部分にデータを作成または更新した人の情報を格納するものとします。
更新した人の情報はsession[:login]に格納されているものとします。
このtestsテーブルのメンテナンス画面をActiveScaffoldを利用する場合です。
モデルは定義済みとしてcontrollerは、以下のようにすればOKです。
class TestController < ApplicationController active_scaffold :tests do |config| config.label = "テストメンテナンス画面" config.columns = [:data, :data2] config.columns[:data].label = "登録必須データ" config.columns[:data].required = true config.columns[:data2].label = "登録必須でないデータ" config.columns[:recorder].label = "更新者" config.columns[:created_at].label = "作成日時" config.columns[:updated_at].label = "更新日時" config.columns[:data].search_sql = 'data' config.list.columns << :recorder config.list.sorting = [{:data => :ASC}] config.show.columns << [:recorder, :created_at, :updated_at] config.search.columns << :data end protected def before_create_save(record) record[:recorder] = session[:login] end def before_update_save(record) record[:recorder] = session[:login] end end
ポイントはcontroller内に定義した
before_create_save(record):新規登録用
before_update_save(record):更新処理用
を利用することです。
最初は、何も考えずにModelの
before_saveでsession情報を取ろうとしてしまったのですが、
session情報は、Modelでは取れないわけなのでした。
0 件のコメント:
コメントを投稿