2017-07-31 6 views
0

ハッシュ仮想属性でAPI属性/操作は、次のように私は、ハッシュストアを持っ

私が直接持っている可能性が代わりになるようにレール5つの属性のAPIを利用したいと思い:

attribute :order_details, Type::OrderDetailType.new 

を(プラス、それが簡単にEAに検証を追加することになるだろう私のハッシュのchフィールド)

単純な仮想属性(文字列、整数...など)にrails5の属性apiを使用すると、私はexamples onlineを見たことがありますが、ハッシュ属性に対して実装する方法に関する情報は出ていません。 誰かが私を正しい方向に向けることができれば分かるでしょう。

答えて

1

あなたはキャストをオーバーライドし、メソッドをシリアライズすることができますActiveRecord::Type::Value

からType::OrderDetailTypeを拡張します。

def cast(value) 
    value 
end 

def serialize(value) 
    value 
end 

Moneyタイプの例:

# app/models/product.rb 
class Product < ApplicationRecord 
    attribute :price_in_cents, MoneyType.new 
end 

class MoneyType < ActiveRecord::Type::Integer 
    def type_cast(value) 
    # convert values like '$10.00' to 1000 
    end 
end 

product = Product.new(price_in_cents: '$10.00') 
product.price_in_cents #=> 1000 

ドク:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html

例:http://nithinbekal.com/posts/rails-5-features/

+0

おかげで、また、あなたがするでビルド/お勧めの方法があれば知っているだろうキャストメソッドで各キーを手動で検証することを除いて、それらがキャスト/保存される前に属性を検証します( 'value'が上のケースではハッシュであったとします)。 – L457

+0

ドキュメントごとに、キャストメソッド内でのみ検証されます – emaillenin

関連する問題