2012-04-19 34 views
9

Bu arama için Google'da çok fazla sonuç var ve SO'da bile soruluyor - ama şu ana kadar tartışılan çözümler bana yardımcı olmuyor. Sorun şu: Bir form_for @company |f| var ve company_status_id için f.collection_select kullanıyorum - ancak form yüklendiğinde, ayarlanmış ise gerçek şirket durumunu istiyorum. Tanıdığım hata ayıklayıcı aracılığıyla ayarlandı, ancak orada görüntülenen varsayılan bir değer alıyorum. İştef.collection_select seçilen değeri görüntülemiyor

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

oluşturulan 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> 

oluyor Ve koşullar yapmam bile aynı kalır: İşte kod

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

Ya

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

umuyoruz, ama düzgün çalışmıyor. Rayları kullanıyorum 2.3.11. [this] (http://stackoverflow.com/a/1065359/878451) yanıtı tam olarak ne istediğimi ve ne yaptığımı, ancak ne işe yaramadığını söyler. –

+0

bu işe yaramalı. show @ company.company_status_id ve ListCache.company_statuses – tokland

+0

Form tanımınızı, f.object öğesinin ne olduğuna bağlı olarak yayınlayabiliyor musunuz? –

cevap

20

Bu Sonunda ne yaptığını geçerli:

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

Ben collection_select benzer bir soru üzerine cevapların okumaya Otomatik olarak seçili değeri, koleksiyonun nitelikleriyle aktarılanların karşılaştırmasını yaparak seçer. görünüşe göre, onların türleri arasında bir fark vardı ve int in CompanyStatus'un @ company.company_status_id.to_i int ile karşılaştırılması çıktı. @ Company.company_status_id'in de int olması gerekiyordu. Bunu db'de görebiliyorum. Her neyse, bu kod satırı çalıştı.

Herhangi biri açıklayabilirse çok minnettar olacağım! Eğer collection_select yardımcısı kullanırsanız

+1

Mükemmel yanıt bro. Cin. İşte benim son notum. –

+0

bu çok yardımcı oldu. – Batman

+0

Açıkçası Mongoid ile çalışmayacak. –

0

Kullanım select_tag yerine

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


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

    <%end%> 

Umut bu yardım .....

+0

Bunu form nesnesiyle kullanacak olsaydım, f, nasıl görünecekti? Bunu beğendiniz mi? '<% = f.select (" model_name_object [company_status_id] ", options_for_select (kategoriler.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

, sözdizimi çok basit:

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

ben kuruluyor company_status_id bakın orada koyar açıklamayla bu yardım

+0

Bu sadece çalışan bir çözümdür. – prograils

İlgili konular