我正在关注 ruby on rails 教程。我有几个问题:
1. Hier表明
>> "a" * 51
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
因此,我们尝试通过键入以下代码来比较我们的用户的名称是否为 51 个“a”而不是 51 个字符:
before { @user.name = "a" * 51 }
还表明 ("a" * 51).length 为 51。
那么为什么我们不写在 { @user.name = ("a" * 51).length } 之前更符合逻辑,这样用户名由 51 个字符组成,而不是 51 个字符。
2.而且这一刻似乎也很奇怪。解释也很奇怪。
describe "when email address is already taken" do
before do
1. user_with_same_email = @user.dup
2. user_with_same_email.save
end
it { should_not be_valid }
end
在 1. 我们复制我们的原始用户(例如 foo=User.new(name:"Piks", email:"piks@piks.com") 并将 foo 的副本放在变量 user_with_same_email 中。在 2. 我们保存foo 的副本,它返回“true”,因此我们保存了副本,原始 foo 具有数据库中已经存在的电子邮件地址,因此应该是无效的。
但是我要保存的原始 foo 怎么可能无效呢?保存用户的副本根本不符合逻辑,因此原始用户无效。
我想我误解了“前块”。“前块”,即方法 user_with_same_email.save 应该返回“false”。为什么?因为例如,我们的数据库中充满了电子邮件(也有登录名),然后我尝试使用数据库中已经存在的电子邮件注册自己。因此,系统复制了我并将其保存在 user_with_same_email 中并尝试保存它,但它不能,因为数据库中已经存在另一个用户与我的电子邮件。因此,方法 user_with_same_email.save 将返回 false,因此我被认为是无效用户。
在这个例子中,“前块”应该在 roder 中返回“true”以继续它 { should_not be_valid } 还是我错了?
如果有人帮助我,我将不胜感激。谢谢