Rails 3 用のacts_as_paranoid

Rails 2.x系で、論理削除と言ったら、もうこれ!というのが

acts_as_paranoid

でした。

Rails 3.x系では

rails3_acts_as_paranoid
https://github.com/goncalossilva/rails3_acts_as_paranoid

を使います。

インストールの方法は

GemFileに
[shell]gem “rails3_acts_as_paranoid”, “~>0.2.0″[/shell]
と追記して
bundle実行
※Rails3.1の場合は、GemFileに書くプラグインのバージョンが”~>0.1.4″になります。
※Rails3.0の場合は、GemFileに書くプラグインのバージョンが”~>0.0.9″になります。

あとは、論理削除対象のテーブルにdeleted_atカラムを追加し、モデルに
[ruby]class Users < ActiveRecord::Base
acts_as_paranoid
end[/ruby]
という感じで宣言してやればOK。

[Ruby on Rails 3]SolrをRuby on Rails 3から使う

Ruby on RailsからSolrを使うには、このプラグインを使うと良さそうだ

sunspot_rails

ホームページは

https://github.com/outoftime/sunspot

sunspotプロジェクトの一部になっています。

インストールは

Ruby on Rails 3の場合

gemfileに

を追加

あとは

を実行

Ruby on Rails 2の場合は

#config/environment.rb

を追加

#config/development.rb
#config/test.rb

を追加

を実行

config/sunspot.ymlを作成

[Ruby on Rails]Date.todayとかを使っている箇所をテストする方法

日時によって表示項目を制御したりする場合に、よくDate.todayとかDateTime.nowとかを使ったりすると思うが

このシステム日時を取得している場所のテストをうまく実行したい場合に役に立つプラグインが

Timecop

です。

ようは、Date.todayとかで返ってくる日時を固定してしまうというプラグイン。

インストールは

Rails2.*系であれば、config/environments/test.rbあたりに

[text]config.gem ‘timecop’, :version => ‘= 0.3.4′[/text]

を追加し、rake gems:installを実行

テストケースでは

たとえば、2011年10月04日に固定したい場合には

[ruby]Timecop.travel(Date.new(2011,10,4))[/ruby]

とすると、これ以降、Date.todayは2011年10月04日を返すようになる。

日付の固定を解除したい場合は

[ruby]Timecop.return[/ruby]

を実行する

ar-octopus

Railsは、標準では基本的にDBひとつの構成で動く作りになっている。

大規模サイトなどで、DBの負荷も高く、DBを分割しないといけなくなった場合に

Railsの標準構成では難しくなってくる。

そこで、ar-octopus を使う。

これは、更新系の処理はマスターに接続し、参照系の処理はスレイブを参照するように設定できる。

ホームページ

github

Rails 3とRails 2.3.*に対応

インストール

Gemfileに

を追加して

実行

使い方

コンフィグファイルを設定

コンフィグファイルの場所は

#config/shards.yml

で、基本的な設定内容は

※詳しいshards.ymlファイルの設定方法はこちら

usingを使うと、データベースを切り替えることが出来る

以下の場合、Userのfindクエリーの接続先はslaveとなる

ブロックにすることで、ブロック内でのクエリーを一括して指定することが出来る

マイグレーションを実行するデータベースを指定する

レプリケーションの場合

#config/shards.yml ファイルを以下のようにする

replicated: true を設定した場合、database.ymlに設定したものがマスターになる。

carrierwave

carrierwaveは、ファイルアップロード用のプラグインで、attachment_fuと同じようなやつ。

インストール

Gemfileに

を追加

carrierwave用のファイルをジェネレータで作成する

以上のコマンドを実行すると

app/uploaders/image_uploader.rb

ファイルが作成される

モデルの作成

出来上がったマイグレーションファイルのupに以下を追加

モデルの設定

画像の保存先をファイルシステムに設定

app/uploaders/image_uploader.rb

ファイルを開き、

を追加

アップロードしたファイルのサイズのバリエーションを設定

app/uploaders/image_uploader.rb

に以下の設定を追加

[50,50]は画像サイズ
:resize_to_fit は画像の縮小方法で、縦か横の長いほうを50pxにして、縦横比維持したまま縮小
:scaleにすれば、縦横50pxで縮小

thumbのURLを取得するには

とする

will_paginate

ホームページ

github

まだタグでv3.0.0正式対応のものがないようなので、preを使う

インストール

Gemfileに

を追加して

実行

使い方

一覧表示アクションの中で、一覧取得の処理を変更

1ページに表示されるデータの件数を設定

Articleモデルに

を追加

ページ切り替えのリンクをビューに追加

articles/index.html.erbを開き

の行の上あたりに

を追加

rspec

デファクトスタンダードな、Railsのテストツール

ホームページ

公式

まだタグでv3.0.0正式対応のものがないようなので、bataを使う

インストール

Gemfileに

を追加して

実行

rspec用タスクを生成

使い方

  • テスト対象のファイルをとりあえず追加
  • scaffoldで作成したファイルに対してrspecのファイルを作成
  • マイグレーション実行
  • テスト実行
  • 以下のような実行結果がでるはず

    Startedの下にドット「.」が出るが、これは一つのテストケースを実行して正常に終了したという表示
    ここが「F」になれば、テストケースがエラーになったということ。
    *はペンディングなテストケース
  • 以下作成中

FactoryGirl

fixtureの代替となるツール

ホームページ

Github

インストール

Gemfileに

を追加して

実行

使い方

  • 定義
    specフォルダの下にfactoriesフォルダを作成
    このフォルダの中にrbファイルを作成し、そこにデータのひな形を作成する
    #spec/factories/users.rb 
  • ひな形を元にデータを作成
  • 連番の付いたデータを作成
    まず、factories/users.rbファイルに以下を追加
    #spec/factories/users.rb 

    ひな形の中のemailのデータ部分を以下に書き換え

    もしくは、直接以下のように書く
  • 以下作成中

devise

DeviseはWardenに基づくRailsのフレキシブルな認証プラグインです。
特徴は

  • Rackベース
  • Railsエンジンに基づく完全なMVC
  • 複数ロール(複数テーブル)が可能
  • モジュール方式概念に基づいている

ホームページ

インストール

Gemfileに

を追加して

実行

使い方

deviseを使用するために必要な最低限のファイルをインストールする

モデルを作成する

マイグレーション実行

Homeコントローラを追加(トップページのつもり)

home_controller.rbにログイン用のbefore_filter追加

このbefore_filterの追加で、HomeControllerへのアクセスはすべてユーザのみ可能となる。もしユーザでない場合、ログイン画面に転送される。
#app/controller/home_controller.rb 

※ここのauthenticate_user!のuserは、rails generate deviseで追加したモデル名
それによって、ロール(モデル)分けが出来るみたい

routes.rbの修正

HomeControllerのindexをルート指定する
#config/routes.rb
に以下を追加 

不要なファイルを削除

#public/index.html
このファイルを削除
このファイルがあると、routes.rbにroot設定したものが呼び出されない

サーバの起動

http://localhost:3000にアクセス

http://localhost:3000/にアクセスすれば、ログイン画面が表示される
この画面が気に入らなければ、ビューをカスタマイズすることが出来る

ビューのカスタマイズ

これで
#app/views/devise の配下にカスタマイズ用のビューが作成される
ビューだけのカスタマイズでは対応出来ない場合、コントローラもカスタマイズ出来る

deviseで使用する項目やメッセージの日本語化

#config/locales/devise.en.yml
このファイルをコピーしてdevise.jp.ymlにする。
ファイルを開き、3行目あたりのen:という所をjp:に変更。
各項目を日本語化する

コントローラのカスタマイズ

#app/controller/SessionsController.rbファイルを作成し
以下のようにクラスを継承します 

app/views/devise/sessions というディレクトリを app/views/sessionsに移動する。

routes.rbにカスタマイズしたコントローラを使うように設定を追加

Authlogic

認証処理
openIDとかLDAPとかと連携して認証するためのプラグインが存在する

ホームページ

Github

Rails 3 に対応していないようなので、フォークの中からRails 3 対応中の物を探す
新しい物が良いな~と言うことで、
http://github.com/crossroads/authlogic
あたりが良いか?
だが、安定して使える物を探す必要はある。
オリジナルがRails 3 に対応すれば、それを使いたい。

インストール

Gemfileに

を追加して

実行

セッションモデルを追加

ユーザモデルを追加

ユーザテーブルのマイグレーションファイルを修正

#db/migrate/20100903092404_create_users.rb

マイグレーション実行

ユーザモデルの修正

#app/models/user.rb

ユーザセッションコントローラの作成

以下作成中