ruby-on-rails – 如何在Rails 4中存储自定义常量?
发布时间:2020-12-16 22:34:30 所属栏目:百科 来源:网络整理
导读:我做了一些电子邮件,bitmessage等的正则表达式,并把它们作为常量 #config/initializers/regexps.rbREGEXP_EMAIL = /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})z/iREGEXP_BITMESSAGE = /ABM-[a-zA-Z1-9[^OIl]]{32,34}z/ 并使用它 if @user.contact =~ REGE
我做了一些电子邮件,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). 我通常在lib中创建一个fooapp.rb文件,如下所示 module Fooapp end 我把常数放在里面还要确保在你的application.rb文件的底部 require 'fooapp' 在这种情况下,文件的延迟加载将不起作用,因为Fooapp模块已经被定义. 当常量的数量变得足够大时,您可以将它们更多地分成一个单独的文件,例如/lib/fooapp/constants.rb.最后一步只是将所有常量组合成一个简单的地方(我倾向于使用常量来替代魔术数字或进行优化),但尽管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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |