私はrailstutorial.orgでチュートリアルを進めてきましたが、セクション-6.2.1プレゼンスの検証の作成者のコードに少し困惑しました。
ユーザーモデルでは、チュートリアルはを追加しますvalidates :name, :presence => true
。十分に単純です。
著者がrspecテストを書くことを選択したとき、彼は私が少し奇妙だと思った何かをします。
describe User do
before(:each) do
@attr = { :name => "Example User", :email => "user@example.com" }
end
.
.
.
it "should require a name" do
no_name_user = User.new(@attr.merge(:name => ""))
no_name_user.should_not be_valid
end
end
@attr
空白の文字列をマージして、:eachブロックステートメントを削除して次のように記述できるようにするのに、なぜ問題が発生するのでしょうか。
it "should require a name" do
no_name_user = User.new(:name => "", :email => "user@example.com")
no_name_user.should_not be_valid
end
著者が変数を使用して電子メールアドレスの存在も検証していることを知ってい@attr
ます。これは、彼がブロックステートメントを使用した理由の1つの指標です。私にとっては、2番目のブロック引用符の構造に従う方が理にかなっています。それでも、ここに欠けているものがあるような気がします。
私の頭に浮かんだもう1つの説明は、@attr
名前と電子メールだけのこのかなり単純なケースとは対照的に、入力するキーがたくさんあるときに構造を使用すると役立つということです。
誰か入力がありますか?