0

私はかなり単純なルビー構文の質問(および他のいくつかの説明)を持っています、そして私は私の人生のためにそれを理解することができません。

コンテキストは、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}
)

どこかでバックスラッシュを使用して行を分割できることをルビーの慣習で読みましたが、特にコンマまたはオペランドが行の終わり。

私の最後の質問は:

誰かが、適切な中括弧と角かっこをすべて配置して、この検証メソッドを作成できますか?たぶん私は、基本的な構文がどこに行くのかについて少し混乱しています。

簡単な要約:

1行を分割する方法は、上記の検証を適切に行いますか?
バックスラッシュでルビーコードの行を分割できますか?
誰かがすべての中括弧と括弧で書かれた同じメソッドを書きます。

よろしくお願いします。

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リテラルをすべて1行にまとめる傾向があります。長すぎる場合は、Regexp.new代わりに使用を開始できます

于 2011-12-13T22:04:43.823 に答える