我有一个相当简单的ruby语法问题(以及其他几个澄清),我无法弄清楚我的生活。
上下文是我有非常常见的模型类继承ActiveRecord :: Base,我正在使用验证。
我相信Ruby惯例喜欢通过将多段代码分成多行来保持整洁,如果这些行达到80行,除非像正则表达式一样难以做到这一点。我的第一个问题是:
如何正确拆分此验证行以使其正常工作?
validates :email, :uniqueness => true, :length => {:within => 5..50}, :format => {:with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i}
我尝试过这样的事情:
validates(
:email,
:uniqueness => true,
:length => {:within => 5..50},
:format => {:with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i}
)
我在ruby惯例中读到你可以使用反斜杠分割线条,我还没有尝试过,因为我认为看起来有点奇怪,特别是当你可以通过确定逗号或者逗号来利用Ruby的力量时操作数位于该行的末尾。
我的最后一个问题是:
有人可以使用所有适当的大括号和括号来编写此验证方法吗?也许我对基本语法在哪里感到困惑。
快速回顾:
如何正确拆分上面的单行验证?
你能用反斜杠分割红宝石代码行吗?
有人写了用所有大括号和括号写的相同方法。
提前致谢。
答案 0 :(得分:0)
你有正确的想法。我会这样编写验证宏,
validates :email,
:uniqueness => true,
:length => {:within => 5..50},
:format => {:with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i}
我们并不需要为类宏添加括号。第一行清楚地表明我们正在验证:email
属性,后续行是对它的各种验证。
是的,你可以使用反斜杠,但它通常是不需要的,imo,对我来说看起来很难看。最好以操作符结束,然后继续下一行缩进。有关示例viz-a-viz
,请参阅http://ruby-doc.org/docs/ProgrammingRuby/html/language.html如果可能的话,我倾向于将RegExp文字保存在一行中。如果时间过长,您可以开始使用Regexp.new
代替