2014-10-17 85 views
0

我有一個哈希值在哈希:我可以在散列中省略散列的大括號嗎?

validates :password, 
     length: { within: 5..30 }, 
     presence: true 

是否可以省略大括號中的哈希散列?這:

validates :password, 
      length: within: 5..30, 
      presence: true 

引發語法錯誤。

+2

這些是大括號,而不是括號或制動器。 – sawa 2014-10-17 16:21:38

+0

假設你有'h = {a:b,{c:d,e:f},{e:g}}'並且想要提取'f'和'g'的值,即'h [{c :d,e:f}] [:e]'和'h [{e:g}] [e]'。如果可以忽略括號,這將變成'h = {a:b,c:d,e:f,e:g}',但由於散列不能有重複的鍵,所以'e:f'或'e:g'將不得不去。即使最後的散列是'{h:g}',Ruby怎麼可能知道如何從'{a:b,c:d,e:f,h:g}'中提取鍵和值? – 2014-10-17 17:13:27

回答

3

更準確地說,你在哈希文字中有一個哈希文字,恰好是方法調用中的最後一個參數。只有當哈希是方法調用中的最後一個參數時,纔可以省去大括號,因此它們在其他地方都是必需的。你的內部哈希值是另一個哈希文字中的值,這不是方法調用中的最後一個參數,所以不,你不能這樣做。

1

不幸的是(至少我知道),因爲長度需要多個參數,並期望散列作爲參數。我發現自己做的一件事是在我的config/constants.rb文件中初始化這些約束條件,因爲這些變量不會經常更改,我經常發現自己提供了多個長度參數。

配置/ constants.rb

MODEL_LENGTH_CONSTRAINT = { 
    within: 5..30, 
    too_short: "must have at least %{count} words", 
    too_long: "must have at most %{count} words" 
} 

應用程序/模型/ model.rb

validates :password, 
    length: MODEL_LENGTH_CONSTRAINT, 
    presence: true 

我知道這不是真的你的問題的解決方案,但它是一個有點清潔IMO。快樂的編碼。

相關問題