Rails3×MagicUserstampでcreator_id、updater_idを追加する
MagicUserstampは(id:akm)さんが作ったプラグインで、
creator_id, updater_id, deleter_id (acts_as_paranoidと併用時)を自動で追加してくれます。
詳細は、(id:akm:20091028:1256731307)
または、akm/magic_userstamp · GitHubを見てください。
今回はRails3でMagicUserstampを使ってみました。忘れないようにメモっておきます。
※Authlogicプラグインを既にインストールしていることを前提にしています。
binarylogic/authlogic · GitHub
以下、akm/magic_userstamp · GitHubのREADMEを参考にMagicUserstampをインストールしていきます。
Gemfile
gem 'magic_userstamp'
Gemfileに上記1行を追加します。
$ bundle install
gemをインストールします。
db/migrate/20100907084640_add_column_magic_userstamp_ids_to_all_tables.rb
class AddColumnMagicUserstampIdsToAllTables < ActiveRecord::Migration def self.up add_column :bukkens, :creator_id, :integer add_column :bukkens, :updater_id, :integer end def self.down remove_column :bukkens, :creator_id remove_column :bukkens, :updater_id end end
モデルにMagicUserstampが使うカラムを追加します。
※モデルは既にあったので、カラムを追加するマイグレーションを作成しました。
※deleter_idは使用しませんでした。
$ rake db:migrate
マイグレーションを実行して、テーブルにカラムを追加します。
config/initializers/magic_userstamp.rb
require 'magic_userstamp' # Comment out if you don't use t.userstamp at all in migrations ActiveRecord::ConnectionAdapters::TableDefinition.send(:include, MagicUserstamp::MigrationHelper) ActiveRecord::Base.module_eval do include MagicUserstamp end MagicUserstamp.config.setup do |config| # config.verbose = true # config.verbose = {:classes => [:Version]} config.defaults(:stamper_class_name => 'User') end # If you have some classes which has loaded before Userstamp is loaded, # Set record_userstamp = true # Example: vestal_versions gem # Version.record_userstamp = true if defined?(Version)
設定ファイルを新規作成します。
app/controllers/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery helper :all before_filter :set_user after_filter :reset_user private # # = Magic Userstampで使用するメソッド = # def set_user user_id = current_user.id if current_user # ここではIDが帰ってくるはず。 User.model_stamper # UserがIDを覚えられるようにする。 User.stamper = user_id # IDを覚えておく。stamper=にはオブジェクトを渡してもOK。 end def reset_user User.model_stamper # Userが覚えているIDを忘れることができるようにする。 User.reset_stamper # Userが覚えているIDを実際に忘れる。 end end
ApplicationControllerに必要なメソッドとフィルターを追加します。
app/models/bukken.rb
class Bukken < ActiveRecord::Base MagicUserstamp.config.compatibles end
最後にモデルに一行追加すれば、OKです。
これで新規作成時にcreator_id、更新時にupdater_idが自動で登録されるようになりますw