通过docs for creating an activerecord object阅读,我看到你可以做到以下几点:
您可以使用哈希初始化对象,如此,
user = User.create(name: "David", occupation: "Code Artist")
或者您可以使用块
初始化对象user = User.new do |u|
u.name = "David"
u.occupation = "Code Artist"
end
有人可以告诉我为什么你想用块来做这件事吗?是否有特定的计算机科学或开发人员最佳实践原因,块初始化将是一个优势?
答案 0 :(得分:3)
最重要的区别是您不能为protected attributes分配哈希值 - 因为哈希值假定来自不安全的来源,例如提交的表单。
使用块语法,您可以为对象分配任何属性并执行任何其他操作。它对new
似乎没有用,但它对create
或find_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