2011-12-13 127 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代替