2011-12-13 99 views
0

我有一个相当简单的ruby语法问题(以及其他一些说明),而且我无法弄清楚它是否适合我的生活。Ruby on Rails验证方法结构

上下文是我有相当常见的模型类子类ActiveRecord :: Base,我正在使用验证。

我相信Ruby惯例通过将多行代码分割成多行来保持整洁,除非像一个正则表达式那样很难完成这些操作。我的第一个问题是这样的:

我该如何正确分离这个验证线,以便它能正常工作?

validates :email, :uniqueness => true, :length => {:within => 5..50}, :format => {:with => /^[^@][\w.-][email protected][\w.-]+[.][a-z]{2,4}$/i} 

我已经试过了诸如:

validates(
    :email, 
    :uniqueness => true, 
    :length => {:within => 5..50}, 
    :format => {:with => /^[^@][\w.-][email protected][\w.-]+[.][a-z]{2,4}$/i} 
) 

我在Ruby中约定读的地方,你可以分割使用反斜杠行,因为我认为,想看看我没有尝试它尚未有点奇怪,尤其是当你可以通过确保逗号或操作数位于行末时利用Ruby的强大功能。

我的最后一个问题是:

可能有人写这个验证方法与地方的所有适当的括号和括号?也许我有点困惑,基本语法到底在哪里。

快速回顾:

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

提前致谢。

+0

使用反斜线来逃避行尾字符现在被认为是不好的做法。否则,你的validates方法看起来很好。把你的时间花在更有意义的事情上。 – maprihoda 2011-12-13 21:54:59

+0

你是说如果你用逗号分割这一行而没有括号,它会抛出一个语法错误?如果是这样,你可以发布错误吗? – 2011-12-13 21:57:59

回答

0

你有正确的想法。我会这样写验证宏,

validates :email, 
    :uniqueness => true, 
    :length => {:within => 5..50}, 
    :format => {:with => /^[^@][\w.-][email protected][\w.-]+[.][a-z]{2,4}$/i} 

我们确实不需要类宏的封闭括号。第一行将清楚地表明我们正在验证:email属性,随后的行对其进行了各种验证。

是的,你可以使用反斜杠,但它通常是不需要的,imo,对我来说看起来很丑。最好结束一个操作符,然后继续缩进下一行。请参阅http://ruby-doc.org/docs/ProgrammingRuby/html/language.html举例说明:即使可能,我也倾向于将RegExp文字全部保留在一行中。如果得到的时间太长,则可以使用Regexp.new代替