Ruby on Rails验证方法结构

时间:2011-12-13 21:51:04

标签: ruby-on-rails ruby syntax multiline lines-of-code

我有一个相当简单的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的力量时操作数位于该行的末尾。

我的最后一个问题是:

有人可以使用所有适当的大括号和括号来编写此验证方法吗?也许我对基本语法在哪里感到困惑。

快速回顾:

如何正确拆分上面的单行验证?
你能用反斜杠分割红宝石代码行吗?
有人写了用所有大括号和括号写的相同方法。

提前致谢。

1 个答案:

答案 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代替