酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

[Gem] Static_model yamlファイルを読み込んでActiveRecordのように扱う [Rails]

Where?yamlで定義したデータを読み込んでActiveRecordのクラスのようにデータを扱うことができるGem「static_model」の紹介です。

static_model


Gemのインストール

いつもどおりGemfileに以下を追加して、bundle installを実行してください。

1
2
3
4
group :development do
    # Static Model(yamlでActiveRecordっぽいクラスを作る)
    gem "static_model"
end

static_modelの作成手順

まずは、static_modelの元となるyamlファイルを作成。

1
2
3
4
5
6
7
- id: 1
  title: The Ruby Way
  author: Hal Fulton
- id: 2
  title: Programming Ruby
  author: Dave Thomas
  publisher: Pragmatic Programmers

続いて、static_modelを作成します。このstatic_model内で先ほど作成したyamlファイルの場所を指定します。

1
2
3
class Book < StaticModel::Base
  set_data_file "#{Rails.root}/path/to/my/file/withanothername.yml"
end

static_modelの利用例

static_modelの具体的な利用例です。ActiveRecordみたいなことが簡単にできちゃいます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> Book.find(1)
=> #<Book:0x1706fd8 @attributes={:author=>"Hal Fulton", :title=>"The Ruby Way"}, id1

>> Book.first
=> #<Book:0x1706fd8 @attributes={:author=>"Hal Fulton", :title=>"The Ruby Way"}, id1

>> Book.find(:all) (or Book.all)
=> [#<Book:0x1706fd8 @attributes={:author=>"Hal Fulton", :title=>"The Ruby Way"}, id1, 
  #<Book:0x1706fc4 @attributes={:author=>"Dave Thomas", :title=>"Programming Ruby", :publisher=>"Pragmatic Programmers"}, id2]

>> Book.find_by_title('The Ruby Way')
=> #<Book:0x1706fd8 @attributes={:author=>"Hal Fulton", :title=>"The Ruby Way"}, id1

>> b = Book.first
>> b.title
=> "The Ruby Way"
>> b.id
=> 1

ActiveRecordのクラスとリレーション(:belong_to, :has_one, :has_many)を持つことも出来るようです。

1
2
3
4
5
6
7
8
class Reader < ActiveRecord::Base
  belongs_to :book, :foreign_key => 'book_id'
end

>> r = Reader.create(:name => 'Aaron Quint', :book_id => 1)
=> #<Reader>
>> r.book
=> #<Book:0x1706fd8 @attributes={:author=>"Hal Fulton", :title=>"The Ruby Way"}, id1

もし、興味があれば是非チャレンジしてみて下さい!

static_model

おすすめの書籍