Полагаю, это будет зависеть от нескольких вещей, в том числе от того, кто изменит его и как часто его нужно будет менять. Если это просто конфигурация, которая будет меняться редко, если вообще - тогда, я бы поместил ее в файл конфигурации или в какой-нибудь инициализатор:
PUBLIC_FIELDS = %w(field_one, field_two, field_three)
PRIVATE_FIELDS = %w(field_four, field_five, field_six)
Если это что-то, что должно было быть динамичным и статичным для приложения, когда пользователи могли бы регулярно изменять информацию, я бы выбрал отдельную модель, называемую field_visibility
, со следующими полями field_name
, visibility
. Я бы сначала загрузил поля в качестве начальных данных, а затем дал бы пользователю пользовательский интерфейс для изменения. Я бы дал модели две названные области:
named_scope :public_fields, :conditions => {:visiblity => 'public'}
named_scope :private_fields, :conditions => {:visiblity => 'private'}
Конечно, вы можете использовать битовое поле вместо строки. Вы также можете добавить имя таблицы в модель, если это будет распространяться на дополнительные модели.
Тогда в модели, к которой это относится, вы могли бы сделать несколько вещей, чтобы сослаться на них. включая именованные области:
named_scope :public_fields, :select => FieldVisiblity.public_fields
отдельные функции, метапрограммирование ... Это также предоставляет возможные улучшения в будущем.
Надеюсь, это поможет!