私は多くのサブモデルを実装している抽象モデルを持っています。私は、サブモデル上で呼び出されたときにサブモデル自身の定義に依存する抽象モデル内のいくつかの関数を定義できるようにしたいと考えています。 Ruby on Railsではそういったことが可能ですか?Ruby on Rails:サブクラスのC++仮想メソッドに似たものはありますか?
長さ属性はサブモデルで定義されている例、:
class Animal
validates_inclusion_of :length, :in => MIN_LENGTH..MAX_LENGTH
end
class Elephant < Animal
MIN_LENGTH = 5
MAX_LENGTH = 20
end
その後、私はElephant.new.saveに行くとき! Elephantの定数で検証を実行したいと思います。
このような検証が行われるという事実は、すべてのサブモデルに共通することになるため、定数の値だけが変化します。
このようにしたかったのですが、どちらの場合も、小文字の方法では、未定義の値に対して名前エラーが発生しました。
Railsでこのようなことが可能ですか?
これは確かですか?間違いなく私には素晴らしいアイデアのように聞こえます。しかし、Railsは、ラムダ関数に動物を渡すのではなく、コンテナを指すことを期待しているようです。これは私が得ているエラーです - ArgumentError:メソッドを含むオブジェクトが含まれていますか?設定ハッシュの:inオプションとして指定する必要があります。 –
はい、確信しています。 HeresのAPIドキュメントからの抜粋: 'validates_inclusion_of:states、:in => lambda {| person | STATES [person.country]} '。さらに、私はそれを答える前にテストしました。 – jdoe
ああ、それを考え出した。これは2011年4月10日に追加されたように見えます。これはおそらく、少なくともRails 3.1から3.0に移行する必要があることを意味します。 –