Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用块而不是散列初始化activerecord对象有什么好处?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 用块而不是散列初始化activerecord对象有什么好处?

Ruby on rails 用块而不是散列初始化activerecord对象有什么好处?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,通过阅读,我发现您可以做到以下几点: 可以用散列初始化对象,如下所示 user = User.create(name: "David", occupation: "Code Artist") 或者可以使用块初始化对象 user = User.new do |u| u.name = "David" u.occupation = "Code Artist" end 有人能告诉我为什么你想用积木做这件事吗?是否有特定的计算机科学或开发人员最佳实践原因使块初始化成为优势 最重要的区别是,您不

通过阅读,我发现您可以做到以下几点:

可以用散列初始化对象,如下所示

user = User.create(name: "David", occupation: "Code Artist")
或者可以使用块初始化对象

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

有人能告诉我为什么你想用积木做这件事吗?是否有特定的计算机科学或开发人员最佳实践原因使块初始化成为优势

最重要的区别是,您不能使用散列进行分配,因为假定散列来自不安全的源,例如提交的表单

使用块语法,可以为对象指定任何属性和执行任何其他操作。它在
new
中似乎不太有用,但在
create
find\u或\u 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通常提供几种做特定事情的方法,有时根据上下文的不同而有所优势。这很好!是的,我知道允许随机表单数据设置应该受到高度限制的权限是多么糟糕的想法。