47.15.4. Roletky z databáze

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 %>
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .