2014-10-01 23 views
1

之間有什麼區別的瞬間:不二者的用戶創建一個新的即時不同的方法創建一個模型

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

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

+1

是的,他們都創建了一個新的「用戶」時刻。 – 2014-10-01 10:03:25

回答

3

這裏有一個非常重要的區別。將散列傳遞給構造函數時,rails將此散列傳遞給assign_attributes方法,該方法可以對此散列做一些魔術。

首先,在rails 4中,如果它沒有通過強屬性邏輯,它可以拒絕params散列(如果沒有,那麼它將工作正常)。在rails 3中,如果至少有一個參數未標記爲attr_accessible,它將拒絕整個散列。

此外,assign_attributes可以接受來自表單的複雜數據結構。即它會接受像date(3i), date(2i), date(1i)這樣的參數,將檢查模型列date。如果它發現它實際上是一個日期(數據庫列類型),它將從這些數據創建一個新的Date對象,並將分配它。

除非您直接撥打assign_attributes,否則這些功能都不可用於塊代碼。