Ответ 1
Имеет смысл, что один из возможных подходов. Единственным недостатком этого подхода является то, что константы будут загрязнять глобальное пространство имен.
Подходом, который я обычно предпочитаю, является определение их внутри пространства имен приложений.
Предполагая, что ваше приложение называется Fooapp
, у вас уже есть модуль Fooapp
, определенный Rails (см. config/application
).
Обычно я создаю файл fooapp.rb
внутри lib
, как показано ниже
module Fooapp
end
и я отбрасываю константы внутри. Также убедитесь, что он находится внизу файла application.rb
require 'fooapp'
Lazy-загрузка файла не будет работать в этом случае, поскольку модуль Fooapp
уже определен.
Когда число констант становится достаточно большим, вы можете добавить их в отдельный файл, например /lib/fooapp/constants.rb
. Этот последний шаг - просто тривиальное улучшение для группировки всех констант в одно простое место (я часто использую константы для замены магических чисел или для оптимизации, несмотря на Ruby 2.1., вероятно, позволит мне удалить несколько констант).
Еще одна вещь. В вашем случае, если регулярное выражение относится к одной модели, вы можете сохранить его внутри самой модели и создать модельный метод
class User
REGEXP_EMAIL = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
REGEXP_BITMESSAGE = /\ABM-[123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ]{32,34}\z/
def contact_is_email?
contact =~ REGEXP_EMAIL
end
end