Если вы хотите проверить, определен ли метод crop_x
для model
, тогда стандартным способом является использование respond_to?
. Поэтому замените ваше состояние следующим:
if model.respond_to? :crop_x
Можно запросить DBA_/ALL_/USER_IND_COLUMNS
, т.е.
SQL> SELECT index_name
2 FROM dba_ind_columns
3 WHERE table_owner = 'SCOTT'
4 AND table_name = 'EMP'
5 AND column_name = 'EMPNO';
INDEX_NAME
------------------------------
PK_EMP
Конечно, можно хотеть развернуть запрос немного. Это возьмет любой индекс, в котором появляется столбец EMPNO. Можно хотеть ограничить себя индексами, где столбец является ведущим столбцом индекса (COLUMN_POSITION
= 1). Или можно хотеть ограничить себя индексами только на том конкретном столбце (так, чтобы не было никакого столбца в COLUMN_POSITION
2), т.е.
SQL> ed
Wrote file afiedt.buf
1 SELECT index_name
2 FROM dba_ind_columns a
3 WHERE table_owner = 'SCOTT'
4 AND table_name = 'EMP'
5 AND column_name = 'EMPNO'
6 AND column_position = 1
7 AND NOT EXISTS( SELECT 1
8 FROM dba_ind_columns b
9 WHERE a.index_owner = b.index_owner
10 AND a.index_name = b.index_name
11* AND b.column_position = 2)
SQL> /
INDEX_NAME
------------------------------
PK_EMP
Познакомьтесь с запросами схемы SYS:
Select * from sys.all_ind_columns where table_name=:TabName and table_owner=:TabOwner;