Выдает ошибку, когда массив не содержит ожидаемый тип данных - PullRequest
0 голосов
/ 01 ноября 2019

В приложении Rails (6) (с PG) у меня есть модель Office с room_ids, которая представляет собой массив UUID s

  t.uuid room_ids, array: true

Есть ли способ повыситьчто-то вроде PG Error*, когда создается офис с room_ids, отличным от UUID?

Office.create(room_ids: [1]) должно вызвать такую ​​ошибку.

Но теперь

Office.create(room_ids: [1])
=> #<Office id: "24e835df-aed9-4d48-8855-82670375c374", room_ids: [nil]>
  • Я не ищу активных проверок записей

1 Ответ

0 голосов
/ 06 ноября 2019

Вы должны быть в состоянии использовать Postgres проверить ограничения и соответствующее регулярное выражение.

Вот сообщение в блоге, которое хорошо подводит итог: Rails ValidationsОграничения проверки Postgres . Из поста:

ALTER TABLE 
  users 
ADD CONSTRAINT 
  users_name_must_look_like_a_name 
CHECK (
  name ~* '^.*[a-z] [a-z].*$'
);

Хотя Rails не предоставляет прямой способ добавления ограничения проверки Postgres, вы можете написать их вручную в процессе миграции, с примерами вы можете ознакомиться в Railsдокументы или в этом SO ответе :

class AddConstraint < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE table_name ADD CONSTRAINT check_constraint_name CHECK (check_column_name IN (1, 2, 3) )"
  end

  def self.down
    execute "ALTER TABLE table_name DROP CONSTRAINT check_constraint_name"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...