2012-04-19 16 views
9

Google पर इस खोज के लिए बहुत सारे परिणाम हैं, और यह एसओ पर भी पूछा जाता है - लेकिन अब तक चर्चा किए गए समाधान मेरी मदद नहीं कर रहे हैं। यहां समस्या है: मेरे पास form_for @company |f| है और मैं का उपयोग company_status_id के लिए कर रहा हूं - लेकिन जब फॉर्म लोड होता है, तो मैं सेट होने पर वास्तविक कंपनी की स्थिति चुनना चाहता हूं। डीबगर के माध्यम से मुझे पता है कि यह सेट किया गया है, फिर भी मुझे वहां प्रदर्शित एक डिफ़ॉल्ट मान मिल रहा है।f.collection_select चयनित मान प्रदर्शित नहीं करना

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

यहाँ उत्पन्न 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> 

है और स्थिति जस की तस बरकरार है, भले ही मैं करता हूँ: कोड यह

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

या

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

पुट बयान के माध्यम से, मैं company_status_id स्थापित किया जा रहा देखते हैं, लेकिन सही ढंग से काम नहीं कर रहा। मैं रेल 2.3.11 का उपयोग कर रहा हूँ। [यह] (http://stackoverflow.com/a/1065359/878451) उत्तर बिल्कुल बताता है कि मैं क्या चाहता हूं, और मैं भी क्या कर रहा हूं, लेकिन क्या काम नहीं करता है। –

+0

यह काम करना चाहिए। @ company.company_status_id और ListCache.company_statuses दिखाएं – tokland

+0

क्या आप अपनी फॉर्म परिभाषा पोस्ट कर सकते हैं क्योंकि यह निर्भर करता है कि f.object क्या है? –

उत्तर

20

यह है कि मैं क्या अंत में किया है:

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

मैं एक ऐसी ही सवाल है कि collection_select पर जवाब की पर पढ़ें स्वचालित रूप से संग्रह के गुणों के साथ पारित होने की तुलना करके चयनित मान का चयन करता है। स्पष्ट रूप से उनके प्रकार का एक अंतर था, और कंपनीस्टैटस से int को @ company.company_status_id.to_i के int में तुलना करने के लिए काम किया। हालांकि @ company.company_status_id भी int होना चाहिए। मैं डीबी में देख सकता हूँ। वैसे भी, यह कोड की यह पंक्ति काम किया।

यदि कोई भी exaplain कर सकते हैं, तो मैं बहुत आभारी रहूंगा!

+1

उत्कृष्ट उत्तर ब्रो। प्रतिभा। मेरा अपवित्र यहाँ है। –

+0

इससे बहुत धन्यवाद मिली। – Batman

+0

हालांकि यह स्पष्ट रूप से मोंगोइड के साथ काम नहीं करेगा। –

0

उपयोग select_tag इसके बजाय

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


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

    <%end%> 

आशा इस मदद आप .....

+0

अगर मैं फॉर्म ऑब्जेक्ट के साथ इसका उपयोग करना चाहता था, तो, यह कैसा दिखता है? यह पसंद है? '<% = f.select (" model_name_object [company_status_id] ", options_for_select (@ listings.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

आप collection_select सहायक का उपयोग करते हैं, वाक्य रचना बहुत सरल है:

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

मैं वहाँ पर इस मदद आशा

+0

यह एकमात्र कामकाजी समाधान है। – prograils

संबंधित मुद्दे