私はRailsアプリケーションでActiveRecordを使用したいと思いますが、ActiveRecordモデルの代わりにPostgreSQLデータベースにデータ制約をエンコードしたいと思います。例えばActiveRecord + postgresql + data constraints
、私は足場によって生成されたモデル、私は名前が合理的に長くすることを確認するだろう
rails generate scaffold User name:string email:string yearofbirth:integer
を持っている場合。例えば
class User < ActiveRecord::Base
validates :name, :length => { :maximum => 140 }
validates_uniqueness_of :name
validates_numericality_of :yearofbirth, :greater_than_or_equal_to => 1900
end
これらの検証は、ActiveRecordが不正なデータを追加しようとすると、いくつかの素晴らしいエラーメッセージをビューに表示するため、有効です。
しかし、私はデータベース自体にルールをエンコードし、データベースにActiveRecordへの見栄えの有益なエラーメッセージを投げて、それをビューレイヤに渡してもらいたいと思います。たとえば、
create table "Users" (
id integer unique,
name varchar(140) unique check(length(name)<140),
email varchar(255),
yearofbirth integer check (yearofbirth >= 1900)
);
これを行うには、私は何をする必要がありますか? pgAdmin IIIツールで試したところ、エラーメッセージが表示されましたが、カスタマイズしたいと思います。
また、これらのデータベースルールをRubyのデータベース移行ファイルにエンコードする方法はありますか?
私に教えていただけると助かります。
1:データ上の制約は常にであるべきDBを作成し、ActiveRecordモデルに自動的に追加します。 RailsとActiveRecordは、唯一の唯一のチェックポイントではなく、私たちのデータにアクセスする唯一の方法です。これは完全性を保証し、ドライ原則を尊重します。したがって、あなたの質問は面白く、良い答えもあります。 – lkuty