LoginSignup
6
6

More than 5 years have passed since last update.

MotionModelを使ってデータ管理

Last updated at Posted at 2012-12-26

インストール

Gemfile
gem 'motion_model'
bundle install --path vendor/bundle
Rakefile
require 'bundler'
Bundler.require

モデルの定義

MotionModel::Modelモジュールをインクルードすることでモデルを使用することできる。
また、MotionModel::Validationsを定義することでバリデーションを使用することも可能とあるけどUninitialize constatnsとなって使用できなかった。

列の定義はcolumnsメソッドに対し名前をキー、型を値としたハッシュを渡す。
Railsライクにbelongs_toなど使ったリレーションも設定できる。

class Tag
  include MotionModel::Model
  columns name: :string, used_count: :int
end

使い方

いたってRailsライクに使える。

Tag.all

t = Tag.new(name: 'hoge', used_count: 10)
t.save

t = Tag.create(name: 'hoge', used_count: 10)

主なクラスメソッド

  • new
  • create
  • all
  • where
  • delte_all
  • destroy_all

主なインスタンスメソッド

  • save
  • delete
  • destroy

保存と展開

saveメソッドを使用してもファイルなどには保存されないのでserialize_to_fileメソッドでファイルに保存する必要がある。

Tag.serialize_to_file('hoge.dat')

ファイルに保存したデータを展開するにはdeserialize_from_fileメソッドを使用する。

Tag.deserialize_from_file('hoge.dat')

これらのメソッドはファイル名を与えて実行すると、以降は省略可能。

検索

Tag.where(:name).eq('hoge')

メソッドチェインで条件を追加することもできる。

Tag.where(:name).eq('hoge').and(:used_count).gt(10)

eqのような演算子?は他にも以下のようなものがある

contain

SQLで言うところのlike

in

そのままin。配列を渡す。

gt, lt

><

gte, lte

>=<=

ne

!=

並び替え

昇順

Tag.order(:updateSequenceNum).all

降順

Tag.order {|x, y| y.updateSequenceNum <=> x.updateSequenceNum}.all

通知

試していないけどNSNotificationCenterを使ってデータの変更などの通知を受け取る事もできる。

使用上の注意

保存時のファイル名

serialize_to_fileメソッドは指定されたファイル名に対しDocumentsディレクトリのパスを連結するので、パスを渡すとエラーになる。

参考

sxross/MotionModel · GitHub

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6