2014-02-09 55 views
1

通過docs for creating an activerecord object閱讀,我看到你能做到以下幾點:使用塊而不是散列來初始化activerecord對象有什麼好處?

您可以用哈希初始化一個對象,像這樣,

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

或者你可以用塊初始化一個對象

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

有人能告訴我爲什麼你想能夠做到這一點塊?是否有特定的計算機科學或開發人員最佳實踐原因,塊初始化會是一個優勢?

+0

我不會說有在這種情況下,最好的做法,除了大多考慮可讀性。 Ruby經常提供幾種做某件事情的方式,有時根據上下文有所不同。 – lurker

回答

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!("[email protected]", {is_admin: true}) 


# will work 
User.find_or_create_by_email!("[email protected]") do |u| 
    u.is_admin = true 
end 
+0

很高興知道!是的,我可以看到允許隨機表單數據設置應該受到高度限制的權限是一個糟糕的主意。 –

相關問題