2017-02-15 8 views
2

私は通常、ActiveModel :: ModelをいくつかのPORO(FormObject :: SignUpなど)に含めます。私は新しいRails 5 ActiveRecord :: Attribute APIについて読んだことがあります。簡単なキャストには使えると思っています。私はそれをインスタンス化しようとすると、新しいActiveRecord :: Attributes APIをPOROで使用することは可能ですか?

は例えば、

class FormObject::SignUp 
    include ActiveRecord::Model 
    include ActiveRecord::Attributes 

    attribute :birthday, :date 
    validates :birthday, presence: true 
end 

与えられた私はNameError: undefined local variable or method `reload_schema_from_cache' for FormObjects::SignUp:Class例外が発生しました。

スタンドアロンで使用する予定はありませんか?ありがとう

+0

アクティブモデル属性の大部分はデータベースを扱っています(実際のSQLクエリに属性を変換しているなど)。これがうまくいかない場合は意味があります。 –

+0

@Joel_Blum彼らは仮想属性として働くためにそれを行うことができました..あなたが読んだり、DBに書き込んだりしないと、それは説明してはいけません。 –

答えて

1

documentationを見ると、このモジュールは多くの仮定(主にスキーマバックアップされたモデル)が多いため、スタンドアロンでは使用できないようです。

define_attribute methodを試しても、attribute_typesのような他のクラスメソッドの実装を提供する必要があります。

Rails 5でActiveModel::Modelを使用すると何が問題になりますか?

class Poro 
    include ActiveModel::Model 

    attr_accessor :foo 
end 
+0

もちろん、私はまだそれを使用したいと思っています、アイデアはtypecasting機能を使用することです..例えば、Poro.new.foo = '2017-02-15'を実行すると、自動的に日付にキャストされます..それだけ。私はドキュメンテーションの上をちらりと見てきましたが、それがスタンダンクローンで使用されるべきではないことは明らかではありません。リンクがありますか? –

1

宝石ActiveModelAttributesを活用し、私はこれを行うために見つけることができました唯一の方法です。その後、読んで私の指示に従ってください。ここで

は逸品です:https://github.com/Azdaroth/active_model_attributes

サイドノート:私は、リンクのみの回答が消えることができ、フィードバックを得ました。このリンクが消えた場合、この回答は実際には無効になります。これはおそらく、宝石がもう存在しないことを意味するためです。

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 16744662) – iehrlich

+0

この場合は当てはまりません。それはそれがライブラリへのリンクである限り、それ自体がソリューションへのリンクではありません。それでも、私は名前で宝石を言いました。希望が役立ちます。 –

関連する問題