目次
Rails2 の Plugin
インストール
script/plugin install hogehoge
ActiveRecordプラグインが要求するカラム
プラグイン | カラム名 | 型 |
---|---|---|
acts_as_list | postion | integer |
acts_as_paranoid | deleted_at | datetime |
acts_as_state_machine | state | string |
acts_as_paranoid
ActiveRecordに論理削除機能を追加する。destroyで論理削除し、find時に自動的に論理削除されたレコード除外する。deleted_atという名前のnull可なdatetime型カラムが必要
acts_as_list
ActiveRecordの順番指定、入れ替えを簡単に記述できる。
インストール
script/plugin install acts_as_list
多テーブルにカラム追加
add_column :many_items, :position, :integer
モデルを修正
class ManyItems < ActiveRecord::Base belongs_to :one_item acts_as_list :scope => "one_item" end
モデルにこんなメソッドが付く
many_item.move_lower many_item.move_higher many_item.move_to_top many_item.move_to_bottom many_item.higher_item many_item.lower_item many_item.first? many_item.last? many_item.decrement_position many_item.increment_position many_item.insert_at many_item.remove_from_list
acts_as_state_machine / aasm
ステートマシンの実装。状態管理を行う処理を簡単に記述できる。
acts_as_state_machineは開発が終了している。現在は、aasmプラグインが使われる。github参照
$ sudo gem sources -a http://gems.github.com # (you only need to do this once) $ sudo gem install rubyist-aasm
gemに入れたくない場合はgitから直接railsアプリに入れてしまう。
$ script/plugin install git://github.com/rubyist/aasm.git
以下古い情報
trunkをインストールしていいものなのかは知らんが、以下のコマンドでインストールできる。
script/plugin install http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk/
ActiveRecordにステートマシンを実装、テーブルhogesにstateというStringカラムを作っておくこと。カラム名は任意に指定出来るが、ここは規約に従っておこう。
class Hoge < ActiveRecord::Base acts_as_state_machine :initial => :ready state :ready state :running state :idle state :disposed event :run do transition :from => :ready, :to => :running end event :suspend do transition :from => :running, :to => idle end event :resume do transition :from => :idle, :to => running end event :dispose do transition :from => :idle, :to => :disposed end end
定義したevent名 + !という名前のメソッドが作られる。それを呼び出すと定義したtransitionの通りにstateが変化する。state変更メソッドを呼んだ時にsaveされるのでデータベースに即座に反映される。
hoge = Hoge.new hoge.state => # ready hoge.run! # 定義したevent名 + ! で状態変化メソッドを呼ぶ hoge.state => # running hoge.dispose! # disposeイベントはidle状態の時だけ有効なので変化しない hoge.state => # running
イベント変更と同時にメソッドを呼ぶ事が出来る。
class Hoge < ActiveRecord::Base acts_as_state_machine :initial => :ready state :ready state :running state :idle, :exit => :exit_idle state :disposed, :enter => :enter_dispose, :after => :after_dispose def exit_idle p "idle状態からexit" end def enter_dispose p "disposeします。" end def after_dispose p "disposeされました。" end
状態が変化したとき
新しい状態の:enter、データ保存、新しい状態の:after、古い状態の:exit
のタイミングで呼ばれる。
イベントの:guardオプションでメソッドを指定すると、そのメソッドがtrueを返したときのみステートが変化する
event :run do transition :from => :ready, :to => :running, :gurad => :block_run end def block_run # 真偽値を返す end
restful_authentication
http://github.com/technoweenie/restful-authentication/tree/master
ログイン処理を簡単に記述できるプラグイン。
インストール
$ script/plugin install git://github.com/technoweenie/restful-authentication.git
この後プラグインディレクトリ名をrestful_authenticationに修正する
使い方
$ ./script/generate authenticated user sessions \ --include-activation \ --stateful \ --aasm --rspec \ --skip-migration \ --skip-routes \ --old-passwords
aasmとstatefulはステートマシンを使った状態管理を行うかどうかのオプション。機能は同じだが利用するプラグインが違う。新しく作るアプリではaasmを推奨。予めaasmプラグインをインストールしておくこと。
Controllerに追記
class HogeController < ApplicationController include AuthenticatedSystem // このクラスのすべてのアクションに認証をかける before_filter :login_required // 特定のアクションを除外する場合 before_filter :login_required, except => [:index, :show] end
以下ふるい情報
$ script/plugin install restful_authentication # こっちかも $ script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
使い方
$ script/generate authenticated user sessions --include-activation --stateful
以下のものが生成される
- ユーザ情報を格納するusersテーブルを作成するマイグレーション
- ログイン・ログアウト処理を行うsessions_controller
作成される機能
- ログイン・ログアウト機能
- acts_as_state_machineプラグインを使ったユーザ状態の管理
- メールによるアカウントアクティベーション
国際化(gettext)
2.1ではruby-gettextを使うのが一般的。Rails 2.2では動作しない。2.2からはrails独自の国際化処理が実装されている。
http://www.yotabanana.com/hiki/ja/ruby-gettext-howto-ror.html
ruby-gettextはgemでinstallする
sudo gem install gettext
gettextプラグインはActionMailerの送信メールを自動的にiso-2022-jpにする機能がある。
ページ送り(will_paginate)
色々なライブラリがあるがRails 2.1ではwill_paginateが良く使われているようだ。will_paginateはgemでインストールする。
sudo gem install will_paginate
config/environment.rbを修正
Rails::Initializer.run do |config| # これを追加(:version => '~> 2.2' はバージョン2.2以降という意味) config.gem "will_paginate", :version => '~> 2.2' end
コントローラ、conditionは無くても良い
@hoges = Hoge.paginate(:page => params[:page], :order => "id" , :per_page => 5)
ビュー
<%= will_paginate(@hoges) %>
これだけ! また、繰り返し要素に class=“autopagerize_page_element” を付けておくとAutoPagerize対応に!
条件を入れて絞り込み検索するときは…
コントローラ
@hoge = Hoge.new(params[:hoge]) @hoges = Hoge.paginate( :page => params[:page], :order => "id", :per_page => 20, :conditions => ["code = ? AND name = ?", params[:hoge][:code]], params[:hoge][:name])
ビュー
<% form_for @hoge, :url => {:action => :search} do |f| %> ほげコード:<%= f.text_field :code, :size => 10 %> ほげ名称:<%= f.text_field :name, :size => 10 %> <% end %> <!-- 途中省略 --> <%= will_paginate(@hoges), :params => {:hoge => params[:hoge]} %>
open_id_authentication
OpenIDを使ったログインを提供。ruby-openidをインストールする必要がある。
ruby-openidのインストール
$ sudo gem install ruby-openid
プラグインのインストール
$ script/plugin install open_id_authentication
githubに移動したらしいので、こっちでインストール
$ script/plugin install git://github.com/rails/open_id_authentication.git
rails3 の plugin
Rails3では多くのプラグインが gem で管理されるようになっているが、railsのプラグイン機構で管理されているものも残っている。
acts_as_list
インストール
$ rails plugin install https://github.com/rails/acts_as_list.git