Provide bracket-method [] to index-like access for ActiveRecord Class. It method is a syntax-sugar of find_by_slug (dynamic-finder of ActiveRecord).
Requirement
- Ruby (1.9+, 2.0)
- Ruby on Rails (3.x)
- Not yet supported rails 4
 
Installation
Add this line to your application's Gemfile:
gem 'activerecord-bracket'
And then execute:
$ bundle
Or install it yourself as:
$ gem install activerecord-bracket
Introduction
(Japanese)
- 
ID とは 別の 唯一の識別子を持つテーブルを前提とします (ex. Twitter)
- Twitterのアカウントには、作成時に任意で選択する変更可能な Username (一般に @zonu_exeのようにユーザを識別するために使用される) と、変更不可能でアカウント作成時に自動で付番される(10進整数のみからなる) ID が存在します
 
- Twitterのアカウントには、作成時に任意で選択する変更可能な Username (一般に 
- 
slug とは、文字集合が概ねASCIIからなる、平易なURIとして 期待される 文字列のことです
- この用語はWordPressから輸入しました。実際にはWordPressではASCIIのみといった制限はありませんし、 ActiveRecord::Bracketにおいてもその制限はModelのvalidationのみに依存します
 
- この用語はWordPressから輸入しました。実際にはWordPressではASCIIのみといった制限はありませんし、 
Setup
(Japanese)
- ActiveRecordを継承したモデルに slug列を用意します (カラム名の制限は撤廃予定です)- この列は uniqueness であることが望ましいです (必須ではありませんが、 find_by_slugの構文糖でしかないことに留意しないと想定外の挙動をするおそれがある)
 
- この列は uniqueness であることが望ましいです (必須ではありませんが、 
Usage
# define system supported language
Language.create(name: 'Japanese', slug: 'ja')
Language.create(name: 'English' , slug: 'en')
# get Language instance object
ja = Language[:ja] #=> #<Language id: 1, name: "Japanese", slug: "ja">
en = Language[:en] #=> #<Language id: 2, name: "English", slug: "en">
# filter non-supported languages
ko = Language[:ko] #=> nil
fr = Language[:fr] #=> nil
# sanitize
errorkeystr = 'kimiha jitsuni baka dana'
_ = Language[errorkeystr] #=> nil(Japanese)
- 
Model.[]の引数はString,SymbolのどちらでもActiveRecordがよしなに扱ってくれます。たぶん。
Contributing
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request