我一直在阅读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
变量来验证电子邮件地址的存在,这是他使用块语句的原因之一——对我来说,遵循第二个块引用的结构更有意义。不过,我有一种感觉,我在这里缺少一些东西。
@attr
我想到的另一种解释是,当需要输入很多键时,它有助于使用该结构,而不是仅使用名称和电子邮件的这种相当简单的情况。
有人有意见吗?