Ruby создает массив или хэш с id => company_name из запроса find (: all) - PullRequest
1 голос
/ 23 декабря 2011

У меня есть список поставщиков.Мне нужно поместить их в меню выбора формы, используя атрибут коллекции.Мне нужно, чтобы значения были идентификаторами, а метка - названиями компаний.

У меня есть это :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>

1 Ответ

2 голосов
/ 23 декабря 2011

Вы можете сопоставить каждого поставщика с мини-массивом, который содержит идентификатор и имя:

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

В этом случае «поставщики» не являются строго необходимыми, но если вы когда-либо объедините это сдругие запросы (например, my_product.vendors.all(:select => ...)) могут привести к путанице в отношении идентификатора , если вы не укажете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...