2012-04-19 23 views
9

Jest tak wiele wyników dla tego wyszukiwania w google, a nawet pytano w SO - ale rozwiązania omówione do tej pory nie pomagają mi. Oto problem: Mam form_for @company |f| i używam f.collection_select dla company_status_id - ale kiedy formularz ładuje, chcę, aby faktyczny status firmy został wybrany, jeśli jest ustawiony. Dzięki debuggerowi wiem, że został ustawiony, ale dostaję tam domyślną wartość. Oto kod:f.collection_select nie wyświetla wybranej wartości

= puts @company.company_status_id 
= f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value} 

oto generowane htmnl

<select id="company_company_status_id" prompt="-Select-" name="company[company_status_id]"> 
<option value="1">-Not Available-</option> 
<option value="2">Active</option> 
<option value="3">Bankrupt</option> 
<option value="4">Acquired</option> 
</select> 

a warunki pozostają takie same, nawet jeśli robię:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => :selected => @company.company_status} 

Albo

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status} 
+0

poprzez zestawienie stawia tam, widzę company_status_id jest ustawiony, ale nie działa poprawnie. Używam szyn 2.3.11. [this] (http://stackoverflow.com/a/1065359/878451) odpowiedź mówi dokładnie, czego chcę, a także co robię, ale co nie działa. –

+0

to powinno działać. show @ company.company_status_id i ListCache.company_statuses – tokland

+0

Czy możesz zamieścić definicję formularza jako zależną od obiektu f.object? –

Odpowiedz

20

To co w końcu zrobił:

f.collection_select :company_status_id, ListCache.company_statuses, :id, :name, {:prompt => @select_value, :selected => @company.company_status_id.to_i} 

czytałem na z odpowiedzi na podobne pytanie, które collection_select automatycznie wybiera wybraną wartość, porównując to, co jest przekazywane z atrybutami kolekcji. najwyraźniej była różnica w ich typach i porównano int z CompanyStatus do int @ company.company_status_id.to_i. Chociaż atrybut @ company.company_status_id również ma być int. Widzę to w db. W każdym razie, ta linia kodu działała.

Jeśli ktokolwiek może wytłumaczyć, będę bardzo wdzięczny!

+1

Doskonała odpowiedź bro. Geniusz. Oto mój upvote. –

+0

to bardzo pomogło. – Batman

+0

Oczywiście nie będzie działać z Mongoidem. –

0

Używaj select_tag zamiast tego

<%= form_for(@product, :html => {:multipart => true}) do |f| %> 


    <%= select_tag("product[category_id]", options_for_select(@categories.map { |cat| [cat.name, cat.id] })) %> 

    <%end%> 

Nadzieja to pomóc .....

+0

Gdybym użył tego z obiektem formularza, f, jak by to wyglądało? Podoba Ci to? '<% = f.select (" model_name_object [company_status_id] ", options_for_select (@ categories.map {| cat | [cat.name, cat.id]}))%>' –

2
<% form_for(@company) do |f| %> 
    <%= f.select(:company_status_id, ListCache.all.map {|lc| [lc.name, lc.id]}) %> 
<% end %> 
3

Jeśli używasz collection_select pomocnika, składnia jest bardzo prosta:

<%= f.collection_select :category_id, Category.all, :id, :name, 
         prompt: true, selected: @product.category_id %> 

Mam nadzieję, że to pomoże

+0

To jedyne rozwiązanie robocze. – prograils

Powiązane problemy