Fab*_*bio 2 regex activerecord eval ruby-on-rails
我需要使用 ActiveRecord 在数据库表中存储与其他字段相关的正则表达式。
我在 Regexp 类中找到了to_s方法,它指出
返回一个包含正则表达式及其选项的字符串(使用 (?opts:source) 表示法。这个字符串可以被反馈到 Regexp::new 到一个与原始语义相同的正则表达式。(但是,Regexp# == 在比较两者时可能不会返回 true,因为正则表达式本身的来源可能不同,如示例所示)Regexp#inspect 生成通常更易读的 rxp 版本。
所以这似乎是一个可行的解决方案,但它会用一种不寻常的语法存储 exp,为了让字符串存储我需要用/my-exp/.to_s. 此外,我可能无法直接编辑为正则表达式。例如一个简单的正则表达式产生:
/foo/i.to_s # => "(?i-mx:foo)"
Run Code Online (Sandbox Code Playgroud)
另一个选项是评估字段内容,因此我可以将普通表达式存储在 db 列中,然后执行 aneval(record.pattern)以获取实际的正则表达式。这是有效的,因为我是唯一负责管理正则表达式记录的人,所以这样做应该没有问题,除了应用程序错误;-)
我还有其他选择吗?我不想在 db 字段上做 eval 但另一方面我不想使用我不知道的语法。
用于serialize按原样存储您的正则表达式
class Foo < ActiveRecord::Base
serialize :my_regex, Regexp
end
Run Code Online (Sandbox Code Playgroud)
请参阅API 文档以了解更多信息。