Edited at

RailsでDBと連携しないModelを作成する

More than 1 year has passed since last update.


概要

RailsのModelは、通常DBと結びついていないと使えないが、

データソースをDBではなく外部APIなどに変更し、

validation機能はそのまま使いたい。

ActiveModel::ModelをMixInしてvalidation機能を有効にし、

callbackでvalidateすることで実現する。


環境


  • rails 5.0.0.1

  • ruby 2.3.1


ソースコード例

ActiveModel::ModelをMixIn

これで通常のModelと同様にvalidate機能を利用できる。

自作validationも使えるようになる。


app/model/sample.rb

class Sample

# MixIn
include ActiveModel::Model

attr_accessor :name, :email, :age

# before_saveを使うための記述
define_model_callbacks :save
# callbackで実行するmethodを指定
before_save :form_validation

# validations
validates :name, presence: true, strict: true
# email: trueは自作validation
validates :email, email: true, presence: true, strict: true
validates :age, presence: true, strict: true

# method例
def all
run_callbacks :save do
'sample data'
end
end

# method例
def find(id)
run_callbacks :save do
%Q(sample data: #{id})
end
end

# callback用 validation
private
def form_validation
self.valid?
end
end


[参考]

Rails4 DB連携なしモデルでバリデーション機能を使う

[Rails 4.0] ActiveRecordのコールバックが呼ばれる順番まとめ

ActiveRecordのコールバックの順序・コールバック内のロールバック処理について