2017-02-25 12 views
0

ActiveRecord::Baseにもう少し「魔法の」メソッドを追加することが可能かどうかを確認しようとしています。たとえば、デフォルトでは[attribute]_changed?[attribute]_wasのメソッドがあります。私は、属性名にアクセスして[attribute]_at?属性に[attribute]?エイリアスを動的に追加できるように、ActiveRecordにフックしたいと思います。ActiveRecordにパッチを当てて、すべてのモデルに属性ベースの動的メソッドを追加します

どのポインタも大変ありがとうございます。

ありがとうございました

+0

私は他のタイムスタンプ属性を考えていたので、 'scheduled?'は 'scheduled_at? 'へのエイリアスになります...それは、それがnilになることが許されている属性に対してのみ役に立つと思います。 –

答えて

0

アクティブレコードを「パッチ」しないことをお勧めします。モデルに必要な便利なメソッドを定義するだけです。あなたが提案している動的な解決策は、理論的な将来の利便性を提供するかもしれませんが(例えば、将来的には追加の方法を指定する必要はありません)、読みやすい/保守可能なコードの間には少しトレードオフがあります。

このように読みやすさを犠牲にして、その動作が複数のクラスに適用される場合は、モジュール/ライブラリとして実装してモデルに含めることができます。このモジュールは、例えばmodel concernディレクトリに存在するかもしれません。

もう1つの方法は、モデルが継承する基本クラスを作成してから、ActiveRecord::Baseを継承することです。ダイナミックなソリューションを選ぶなら、あなたが何をしているのかが明白であるように実装することをお勧めします。あらゆる非典型的な実装を隠すことは、今後あなたのコードを理解しようとする誰にとっても苦痛になるでしょう。

よく知られた慣習に従い、利便性よりも読みやすさを優先します。ダイナミックなソリューションを実装する方法のヒントGoogle

この回答は明らかに非常に強くなっていますが、私は思考のための良い食べ物を提供したいと思います!

関連する問題