0

データベースのヌルが嫌い

Null の驚くべき性質から、何年にもわたって非常に多くのバグが発生するのを見てきました。特に、null が含まれるとは思わない列の場合、その意味を簡単に考え損ねて、悪い結果が得られる可能性があります。私は、文字列フィールド (許可されている場合) の空は通常、db では空の文字列と null として表現されるべきであると強く信じています。(ただし、最悪なのは、両方が同じことを意味する場合に、両方の混合を許可することです。)

したがって、過去の問題の経験から、各フィールドを系統的に検討し、null を許可する正当な理由がないデータベース内のフィールドに :null => false という制約を追加しました。空の文字列を許可したい場合は、それをデフォルトとして設定します。

ここまでは順調ですね。

ruby のデフォルト値の扱い方が好き

これを行ったときに、ActiveRecord が DB で定義されたデフォルトを取得し、その値でオブジェクトのプロパティを初期化することに気付きました。私はそれが好きです!

しかし、これは私がもっと欲しくなった。今、私は次のようなコードを追加していることに気付いたからです

validates :name, :presence => true

デフォルトの空の文字列を提供することを選択した場合を除いて、データベースで非 null 制約を定義したすべてのケース。しかし、なぜ私は自分自身を繰り返すのですか?だから私は考えています-ActiveRecordが私のためにこれをしてくれたらいいと思いませんか?

データベースプロパティから検証プレゼンスを追加するにはどうすればよいですか

空の文字列を許可し、それをデフォルトとして設定することによってそれを通知する特別な場合を除いて、データベースに null 以外の制約があるすべての場合にこれらの検証を自動的に作成する方法はありますか?

おまけ: Rails で空の文字列以外のチェックを db 列に追加し、null でない制約と空の文字列以外のチェックの両方がある場合にのみ、文字列フィールドの存在の検証を自動的に追加する方法がある場合、それは本当に素晴らしいことです。それが可能かどうかはわかりません。

4

1 に答える 1

1

デフォルトで検証を行うオブザーバーを追加することで、そのようなことを達成できると思います。ただし、コールバックでできるように、オブザーバー メソッドからアクションをキャンセルする方法があるかどうかはわかりません。

于 2012-08-03T18:04:58.720 に答える