2009-08-20 65 views
1

與敏捷的書一起讀,說,這在腳註:如何在選擇框中查找表格值?

...您只需通過選擇助手做了科幻ND的結果是:在你的查找表 (全部)。

好了...

<%= f.select :source, Source.find(:all) %> 

我的源控制器(因此表)看起來是這樣的:

create_table :sources do |t| 
    t.string :source 

    t.timestamps 
end 

但我的選擇框是一個爛攤子,我得到這種類型的數據在所有的值和顯示:

#<Source:0x23a2bfc> 

所以我試着做一個Source.find(:all, :select => 'name,id')但這仍然給我看起來怪怪的東西。

我在做什麼錯?

回答

3
Source.find(:all) 

將返回一個Source對象數組 - 這不是你想要的。你想要的是一系列選項。東西

select(:source, "source_id", Source.all.collect {|p| [ p.source, p.id ] }) 
+0

謝謝,完美的作品裏面的select方法來回答你的問題。我知道我必須這樣做... .collect和.map之間有什麼區別? – 2009-08-20 13:30:11

+0

沒有區別。 'map'是'collect'的別名。 – 2009-08-20 14:54:21

3

你需要傳遞的選項(或鍵值期權)的集合。 select中的第三個參數實際上傳遞給了options_for_select方法。以一個例子來最好地說明這一點。

options_for_select(["a", "b"]) 

...成爲

<option>a</option><option>b</option> 

大多數時候,你會更感興趣的鍵值對

options_for_select([["a", "1"], ["b", "2"]]) 

...成爲

<option value="1">a</option><option value="2">b</option> 

作爲一個簡短的手段,通過一個完整的收集是很常見的物體的離子並映射它們以符合options_for_select的期望值。

options_for_select(Model.all.map { |m| [m.attr1, m.attr2] }) 

...和使用視圖

<%= f.select(:method, Model.all.map { |m| [m.attr1, m.attr2] }) %> 
+0

謝謝你的解釋。如果可以的話,我會把它們標記爲答案,因爲他們做同樣的事情。 – 2009-08-20 13:37:04

相關問題