2011-12-22 46 views
1

我有一個供應商列表。我需要使用集合屬性將它們放在一個formtastic選擇菜單中。我需要將這些值作爲id和標籤作爲公司名稱。Ruby從find(:all)查詢創建一個數組或散列,id => company_name

我有這個:as => :select, :collection => Vendor.find(:all, :order => "company_name", :select => "company_name").map(&:company_name)但會給我喜歡

<option value="Company A">Company A</option> 
<option value="Company B">Company B</option> 

東西,我需要

<option value="1">Company A</option> 
<option value="2">Company B</option> 

回答

2

可以每個供應商映射到一個包含ID和名稱的小型陣列:

Vendor.all(:order => "company_name", :select => "vendors.id, vendors.company_name").map{|v| [v.company_name, v.id] } 

在這種情況下,「供應商」不是絕對必要的,但如果您將t他與其他查詢(例如my_product.vendors.all(:select => ...))它會混淆如果你沒有指定你想要的ID。

+0

是的,它是反向的[v.company_name,v.id]'。我確實得到了company_name,但是,我得到的是空白而不是id,它只是說'

+0

ok,那是因爲「select」=>你只是提取公司名稱。我會適時更新。 – 2011-12-22 23:36:41