2011-12-13 3 views
0

私はかなり単純なルビー構文の質問をしています(そしていくつかの他の説明もあります)。Ruby on Railsはメソッドの構造を検証します

私は、ActiveRecord :: Baseをサブクラス化しているかなり一般的なモデルクラスを持っており、検証を利用しています。

私はRubyの大会は、それが正規表現などでそれを行うことは困難なものでない限り、これらの行は80行まで行けば、複数行にわたるコードの長い部分を分割することにより、きちんと物事を維持するのが好きと信じています。私の最初の質問は次のとおりです。

この検証済みラインを適切に分割して正しく動作させるにはどうすればよいですか?

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の能力を利用できるとき

私の最後の質問は次のとおりです。

誰かが、これは代わりに、すべての適切なブレースとブラケットとの方法を検証書くことができますか?たぶん、私は基本的な構文がどこに行くのか少し混乱しているかもしれません。

クイック要約:単一の行を分割する方法

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

ありがとうございます。

+0

を使用して起動することができ、今は悪い習慣とみなされています。それ以外の場合、validatesメソッドは正常に動作します。これほど意味のあることにあなたの時間を費やしてください。 – maprihoda

+0

この行をカンマで区切って括弧で囲まないと、構文エラーが発生するでしょうか?もしそうなら、あなたはエラーを投稿できますか? –

+0

また、これはhttp://codereview.stackexchange.com/の方が良いかもしれません。 –

答えて

0

あなたは正しいアイデアがあります。私たちは本当にクラスマクロの囲むブラケットを必要としない、thusly

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

を検証するマクロを記述します。最初の行は、:email属性を検証していることを明確に示しています。後続の行は、さまざまな検証が行われています。

はい、あなたは、バックスラッシュを使用することができますが、それは一般的に不必要だとIMO、私には醜いです。演算子で終了し、次の行をインデントしたほうがよい。私は可能な場合はすべて1行で正規表現リテラルを維持する傾向がある例すなわち-すなわち

ためhttp://ruby-doc.org/docs/ProgrammingRuby/html/language.htmlを参照してください。それはのは長すぎるを取得する場合は、行末文字をエスケープするには、バックスラッシュを使用して代わりにRegexp.new

+0

ハッシュを検証する引数はありますか?括弧が含まれている場合、中括弧で囲むのは正しい方法でしょうか?あるいは彼らはすべて議論ですか? – Ben

+0

まあ、validatesの引数はハッシュではなく、星やスプラットです。公式のAPIについてhttp://api.rubyonrails.org/を見ると、validatesには 'validates(* attributes)'のメソッドシグネチャがあることになります。だから上を見れば、あなたは2つの引数、 ':email'とハッシュを渡しています。 –

+0

ああそうです。明確化と迅速な対応をありがとう。 – Ben

関連する問題