gpt4 book ai didi

ruby-on-rails - rails 4 - 更新用户对象并绕过模型验证

转载 作者:数据小太阳 更新时间:2023-10-29 07:09:04 25 4
gpt4 key购买 nike

我正在按照 Micahel Hartl 的 Rails 教程构建示例应用程序。我试着探索了一下并添加了一些不同的东西——所以在用户表中我添加了一个 account_balance 列。

问题是 User 模型内置了一堆验证:

validates :name, presence: true, length: { maximum: 50 }
validates :username, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }

我有另一个函数试图更新account_balance,方法是:

buyer   = User.find(t.buyer_id)
buyer.account_balance -= item_price
buyer.save

保存失败。当我在 Rails 控制台中运行它时,它返回了以下内容,这对我来说毫无意义:

irb(main):055:0> u = User.first
User Load (0.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1
=> # all the user info here
irb(main):056:0> u.account_balance = 10.00
=> 10.0
irb(main):057:0> u.save
(0.2ms) begin transaction
User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('test@example.com') AND "users"."id" != 1) LIMIT 1
(0.1ms) rollback transaction
=> false

我猜测违反了电子邮件的唯一性约束,但我不知道为什么更新时会发生这种情况?

最佳答案

找到了。只需将 validate: false 传递给保存方法即可。

buyer.save(验证: false)

http://api.rubyonrails.org/classes/ActiveRecord/Validations.html

关于ruby-on-rails - rails 4 - 更新用户对象并绕过模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22545679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com