0

我有一个相当简单的 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 的力量时行尾。

我的最后一个问题是:

有人可以用所有正确的大括号和括号编写这个验证方法吗?也许我对基本语法的去向有点困惑。

快速回顾:

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

提前谢谢。

4

1 回答 1

0

你有正确的想法。因此,我会编写 validates 宏,

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使用

于 2011-12-13T22:04:43.823 回答