Rails模型:before_save {self.password = password.strip}与before_save {password.strip!}

时间:2016-04-06 19:57:35

标签: ruby-on-rails before-save

我的用户模型中有几行用于从用户的电子邮件和密码中删除前导/拖尾空白区域。原始代码看起来像这样:

before_save {self.email = email.strip}
before_save {self.password = password.strip}
before_save {self.password_confirmation = password_confirmation.strip}

这通过了我的测试:

test "password entry should ignore leading/tailing whitespace" do
 @user = User.create(name: "M", email: " foo@bar.com", 
  password: "  password", password_confirmation: "  password")
 assert @user.authenticate("password")
 assert_not @user.authenticate(" password")
end

现在我试图重新考虑它:

before_save {email.strip!}
before_save {password.strip!}
before_save {password_confirmation.strip!}

这适用于我的电子邮件测试,但它破坏了上面的密码测试。所以,问题是,原始版本与重新分解的代码有何不同?

1 个答案:

答案 0 :(得分:0)

您无法使用password.strip!,因为实际上没有password这样的字段 - 它是一个生成并存储密码哈希的setter password=