2012-06-10 66 views
0

我簡單selectRails - 如何驗證f.select字段?

f.select(:name, [["- Choose Name -", 0]] + People.all.map{ |c| [c.name, c.id] }) 

我如何可以驗證,如果選擇一些名字? 我想這條規則:

validates :name, :presence => {:message => 'Name cannot be blank.'} 

但是,如果我不選擇名稱發送形式,形式發送...

所以我想問問你,我如何可以驗證選擇欄?

回答

4

在你的例子中,人們選擇一個名字,他們選擇的名字- Choose Name -與ID 0

如果你想給不符合真正的選擇一個選項,然後你有兩個選擇:

f.select(:name, People.all.map{ |c| [c.name, c.id] }, :include_blank => "- Choose Name -") 

f.select(:name, People.all.map{ |c| [c.name, c.id] }, :prompt => "- Choose Name -") 

這些基本上是相同的。兩者都會在選擇的頂部顯示一個選項,這不會導致設置值。但是,如果沒有選擇當前值,prompt版本將僅顯示此額外選項,即如果在編輯表單上使用,則不會讓用戶通過將其設置回零來清除其選擇。

請注意,該include_blank方法非常類似下面的代碼,但很多更具可讀性:

f.select(:name, [["- Choose Name -", nil]] + People.all.map{ |c| [c.name, c.id] }) 
+1

使用拔毛了地圖,'People.pluck(:名稱,:ID)' – Pachonk

+1

大點。我專注於直接回答OP問題的那部分代碼,但這也是一個非常有用的知識 – Gareth