这个Rails模型发生了什么?为什么不省钱?

时间:2014-01-14 06:31:26

标签: ruby-on-rails ruby ruby-on-rails-4

我相信这应该保存在数据库中,但它不是,并且它也没有给出错误。这是用户模型。

irb(main):232:0* u.email = "cat@mandu.com"
=> "cat@mandu.com"
irb(main):233:0> u.email.encrypt!
=> "a/5MHjJ5n9HTqYATiBOAc9IdowaAWMyUpDRD4dT1b80="
irb(main):234:0> u.email
=> "a/5MHjJ5n9HTqYATiBOAc9IdowaAWMyUpDRD4dT1b80="
irb(main):235:0> u.save
=> true
irb(main):236:0> u.email
=> "a/5MHjJ5n9HTqYATiBOAc9IdowaAWMyUpDRD4dT1b80="
irb(main):237:0> u.reload
=> #<User id: 1, username: "starrychloe", password: "400$8$5a$1cb7a05469a179ca$e86839f656b5b0541fe2a2f63...", last_ip: "127.0.0.1", created_at: "2013-09-30 02:29:28", updated_at: "2014-01-14 06:16:59", email: "cat@mandu.com", nameOnCard: "", creditCard: "", expirationMonth: "", expirationYear: "", address1: "", address2: "", city: "", state: "", zip: "">
irb(main):238:0> u.email
=> "cat@mandu.com"
irb(main):239:0>

这是模型中唯一的验证:

validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }, unless: "email.blank?", on: :create, length: {maximum: 255}

这是ecrypt!方法:

module Encryptor
  def encrypt!
    replace encrypt
  end

end
String.send(:include, Encryptor)

1 个答案:

答案 0 :(得分:1)

我怀疑u.email.encypt!绕过了电子邮件属性的setter,这可能是导致问题的原因。我想改变u.email.encrypt! to u.email = u.email.encrypt!会有效。