3

管理者が GUI から検証ルールを変更できるようにする必要があるため、すべてのデータベース検証ルールをデータベースに保存するアプリケーションがあります。また、ルールは頻繁に変更されることが予想されるため、私の要件は、ルールがデータベースに存在する必要があるということです。

簡単にするために、 User モデルがあり、「名前」には存在するという検証ルールが必要であるとしましょう。通常、次のように言います。

class User < ActiveRecord::Base
  validates :name, presence: true
end

このルールをルール テーブルに貼り付け、データベースにルールをクエリし、ルール テーブルのルールに基づいてモデルを検証する方法はありますか? つまり、このようにモデル ファイルにクエリを書き込む簡単な方法はありますか?

class User < ActiveRecord::Base
  Rule.first.validation
end

Rule.first.validation の値は「validates :name, presents: true」になります。

ありがとう。

4

2 に答える 2

1

実行することは可能ですが( and を使用するvalidatesと言うeval)、非常に制限されており、危険です。さらに、検証がテスト可能であり、システム管理者の気まぐれに左右されるデータベースに動作するように展開されています。このように慣例に反することは強くお勧めしません。長期的には、頻繁な更新 (対応するテストを含む) を展開する方がよいでしょう。

于 2013-04-07T21:33:47.143 に答える
0

この宝石https://github.com/vprokopchuk256/mv-coreを確認してください。これにより、データベース レベルで検証を定義できます。このようなもの:

def change
  create_table :posts do |t|
    t.string :title, length: [1..30]
  end
end

その結果、トリガーまたはチェックの検証が作成されます。それはデータベースに依存します。

内部的には、すべての検証は特別な :migration_validators テーブルに保存されます。:table_name、:column_name、:validation_type、および検証オプションがそこに格納されます。

そして、そのテーブルからモデルへの検証をレベルアップする可能性があります。

class Post < ActiveRecord::Base 
  enforce_migration_validations
end

したがって、検証を動的に追加/削除するために、:migration_validations テーブルを更新できます。そのテーブルの構造は非常に簡単です。

于 2015-01-28T20:32:11.413 に答える