gpt4 book ai didi

ruby-on-rails - 使用 block 而不是散列来初始化 activerecord 对象有什么好处?

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:55 27 4
gpt4 key购买 nike

通读 docs for creating an activerecord object ,我看到您可以执行以下操作:

你可以用哈希初始化一个对象,像这样,

user = User.create(name: "David", occupation: "Code Artist")

或者你可以用一个 block 初始化一个对象

user = User.new do |u|
u.name = "David"
u.occupation = "Code Artist"
end

有人能告诉我为什么您希望能够用积木来完成吗?是否有特定的计算机科学或开发人员最佳实践原因表明 block 初始化是一个优势?

最佳答案

最重要的区别是您不能分配 protected attributes使用哈希 - 因为假设哈希来自不安全的来源,例如提交的表单。

使用 block 语法,您可以为对象分配任何属性并执行任何其他操作。它对于 new 似乎没有用,但对于 createfind_or_create 非常有用:

# won't work (at least shouldn't - in a properly secured app)
User.find_or_create_by_email!("admin@mysite.com", {is_admin: true})


# will work
User.find_or_create_by_email!("admin@mysite.com") do |u|
u.is_admin = true
end

关于ruby-on-rails - 使用 block 而不是散列来初始化 activerecord 对象有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665474/

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