Když editujeme tabulku, v jejímž sloupci jsou indexová čísla do slovníku (číselníku), použijeme místo textového pole roletku ktero budeme plnit z navázané databáze. Nejjednodušší postup je vytvořit si pole a a to předat funkci select
.
<%= @moznosti = Format.find(:all, order => 'name').map{|e| [e.name, e.id]} select :format, @params[:format], @moznosti %>
V prvním řádku si vytvoříme pole s jednotlivými volbami. To získáme tak, že si z tabulky formaty
vybereme všechny záznamy a poskládáme pole možností tak že každý prvek je dvouprvkévé pole obsahující v prvním části text jenž se zobrazí e.name
a v druhé části e.id
. Toto pole voleb pak předáme funkci select
.
Protože je toto poměrně časté, existuje funkce collection_select
collection_select
<%= @volby = Format.find :all, :order => 'nazev' collection_select :format, @params[:format], @volby, :id, :name %>
FIXME:
Pokud položky seznamu k zobrazení choices
rozumí metodám first
a last
, použije funkce select
první hodnotu first
pro zobrazení a poslední last
jako klíč.
<%= @formaty = Format.find(:all, :order => 'nazev').map {|f| [f.nazev, f.id} select :format, @params[:format], @formaty %>
<%= select 'project', 'funding_source_id', FundingSource.find_all.collect {|f| [ f.name, f.id ] } %>
<% form_for :list, @list, :url => {:action => 'create'} do |f|%> … <%= f.select :stredisko_id, Stredisko.find(:all, :order => 'symbol').collect{|s| ["%03d | %s" % [s.cislo, s.symbol], s.id]} %> … <% end %>