属性をnullにすることができるモデルがありますが、null属性が読み取られたときには特別なアクションを実行したいと考えています。特に、私はある例外をスローしたいと思います。それは、すべての罰金だが、それは私が各属性に対して同一のカスタムアクセサをコードに手に持っていることを意味すべてのActiveRecord属性アクセサをラップする方法
class MyModel < ActiveRecord::Base
def anAttr
read_attribute(:anAttr) or raise MyException(:anAttr)
end
end
のようなものです。
私はread_attributeをオーバーライドできると思っていましたが、上書きされたread_attributeは決して呼び出されません。あなたがこれを行う必要があるだろう、なぜ
私は本当になぜ尋ねる必要があります。ここであなたのユースケースは何ですか?確かに良い方法があります。例外は例外的な状況です。 Nilはほとんど例外的ではないようです。 –
それは合理的な質問ですが、私はここで説明する余地があまりありません。一言で言えば、多くのオプションフィールドを持つフォームがあります。提出時には、フォームに対して一連の規則を適用したいと考えています。ルールごとに、「はい」、「いいえ」、または「不十分な情報」のいずれかが表示されます。 それだけでは、「例外によるアボート」メソッドは推奨されません。しかし、我々はまた、可能な限りシンプルでなければならないDSLまたはソートで、ルールを外部に保存します。したがって、ルールそのものの言語はnullをチェックできません。代わりに、ルールは値を使用するだけで、未定義の値へのアクセスがあれば評価が中止されます。 –