gpt4 book ai didi

ruby-on-rails - 你如何在 Rails 4 中存储自定义常量?

转载 作者:行者123 更新时间:2023-12-04 01:38:06 25 4
gpt4 key购买 nike

我为电子邮件、bitmessage 等做了一些正则表达式,并将它们作为常量

#config/initializers/regexps.rb
REGEXP_EMAIL = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
REGEXP_BITMESSAGE = /\ABM-[a-zA-Z1-9&&[^OIl]]{32,34}\z/

并像使用它一样
if @user.contact =~ REGEXP_EMAIL
elsif @user.contact =~ REGEXP_BITMESSAGE

这是好习惯吗?存储它们的最佳方式是什么?

最佳答案

这是有道理的,这是可能的方法之一。这种方法的唯一缺点是常量会污染全局命名空间。

我通常喜欢的方法是在应用程序命名空间中定义它们。

假设您的应用程序名为 Fooapp ,那么您已经有一个由 Rails 定义的 Fooapp 模块(请参阅 config/application )。

我通常在 fooapp.rb 中创建一个 lib 文件,如下所示

module Fooapp
end

我把常量放在里面。还要确保在 application.rb 文件的底部需要它
require 'fooapp'

在这种情况下,文件的延迟加载将不起作用,因为 Fooapp 模块已经定义。

当常量的数量变得足够大时,您可以将它们更多地放入一个单独的文件中,例如 /lib/fooapp/constants.rb 。最后一步只是将所有常量分组到一个简单位置的微不足道的改进(我倾向于大量使用常量来替换魔数(Magic Number)或优化,尽管 Ruby 2.1 Frozen String literal improvements 可能会让我删除几个常量)。

还有一件事。在您的情况下,如果正则表达式特定于一个模型,您可以将其存储在模型本身中并创建一个模型方法
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

关于ruby-on-rails - 你如何在 Rails 4 中存储自定义常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com