gpt4 book ai didi

ruby-on-rails - 即使其他属性无效,Rails 是否保存有效属性?

转载 作者:行者123 更新时间:2023-12-05 03:11:18 31 4
gpt4 key购买 nike

我有一个自动保存的表格。我希望能够运行验证并向用户返回错误消息,但我还想保存所有有效属性。前端是有角度的,所以如果您希望保存所有有效的内容,那会有点烦人。

我希望能够做这样的事情:

# @user = <User name: "Chill Dude" favorite_color: "blue">
@user.save(name: '', favorite_color: "red")
@user.errors #=> ["Name cannot be null"]
@user.reload #=> <User name: "Chill Dude" favorite_color: "red">

我确信我可以想出一些复杂的大型解决方案来利用 object.errors,但我想知道是否有任何简单的 rails-y 方法可以做到这一点?

最佳答案

您可以利用 errors 对象并仅将有错误的列重置回它们之前的值:

u = User.first
u.name = nil # invalid value
u.favorite_color = "red" # ok value

# run validations and set the errors object
u.valid?
# => false

# this shows the attributes with errors
u.errors.keys
# => [:name]

# restore the attributes with errors
u.restore_attributes(u.errors.keys)

# other attributes should stay changed:
u.favorite_color
# => "red"

# save should succeed now
u.save
# => true

参见 Errorsrestore_attributes文档。

更新:啊,我刚刚注意到你在问题中写了关于使用错误的大型复杂解决方案,好吧,我认为这已经足够 rails-y 了:

# any model or ApplicationRecord in Rails 5
def save_valid_attributes
restore_attributes(errors.keys) unless valid?
save # or perhaps even save(validate: false) to speed things up,
# if validations are independent of each other
end

关于ruby-on-rails - 即使其他属性无效,Rails 是否保存有效属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37353903/

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