使用块而不是哈希初始化activerecord对象有什么好处?

时间:2014-02-09 21:45:56

标签: ruby-on-rails ruby activerecord

通过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

有人可以告诉我为什么你想用块来做这件事吗?是否有特定的计算机科学或开发人员最佳实践原因,块初始化将是一个优势?

1 个答案:

答案 0 :(得分:3)

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

使用块语法,您可以为对象分配任何属性并执行任何其他操作。它对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