Могу ли я заблокировать таблицу в Rails? (А я должен?) - PullRequest
1 голос
/ 06 февраля 2012

В моем приложении на Rails есть небольшая таблица со статическими данными (пользовательские роли).Это никогда не должно измениться.Мне интересно, можно ли заблокировать таблицу, чтобы никто (а именно разработчики) не мог случайно изменить ее в рабочей среде.

Или я вообще не должен был помещать эти данные в базу данных?Должно ли это быть где-то жестко закодировано, чтобы сделать редактирование более трудным и, по крайней мере, проверяемым (git blame)?

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

Я бы, вероятно, использовал бы attr_accesible

, если вы напишите что-то вроде:

class Role < ActiveRecord::Base
  attr_accessible #none
end

, вы можете хотя бы предотвратить любое назначение со стороны рельсов, ноэто не предотвращает каких-либо прямых изменений через разработчиков с доступом к базе данных.

см. также эту ветку: Как я могу установить attr_accessible, чтобы НЕ разрешать доступ к ЛЮБЫМ полям ДЛЯ модели, использующей Rubyна рельсах?

1 голос
/ 06 февраля 2012

Правильный способ сделать это с разрешениями. Измените владельца таблицы на другого пользователя и предоставьте пользователю SELECT только рабочую базу данных.

Я бы сказал, что правильное место для такого рода вещей, вероятно, база данных. Таким образом, если они когда-либо потребуются, вы можете изменить их в базе данных, и вам не нужно будет повторно развертывать ваше приложение (при условии, что оно заметит изменение).

Вы не спрашивали об этом, но ваша формулировка напомнила об этом, так что я все равно скажу: вам никогда не нужно явно LOCK таблица с PostgreSQL. Если вы думаете, что это то, что вам нужно сделать, вы должны убедиться, что то, о чем вы беспокоитесь, действительно может произойти в рамках MVCC, и что транзакции не будут делать правильные вещи для вас.

0 голосов
/ 07 февраля 2012

Вы можете использовать триггер для предотвращения обновления таблицы (при условии, что вы не можете добавить нового пользователя БД).

Или используйте представление и убедитесь, что все запросы на чтение проходят через него. (возможно, удалив класс ActiveRecord, соответствующий таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...