2013-10-06 5 views
8

से मैं एक रेल रूप में एक लटकती है:रेल 4 से भरें लटकती मूल्यों डेटाबेस

<%= f.select :lists, [["test1", 1], ["test2", 0]] %> 

यह ठीक काम करता है लेकिन मैं इसे गतिशील कैसे कर सकते हैं। (मॉडल डेटा के साथ बातचीत)

मैं युक्त @list = List.all

मैं कैसे पॉप्युलेट कर सकती id और मेरे combobox में name एक कार्रवाई के साथ एक नियंत्रक है। मैं चारों ओर खोज रहा हूं, लेकिन मैं इसके बारे में अस्पष्ट हूं। क्या कोई मदद कर सकता है>

उत्तर

11

आप options_from_collection_for_select का उपयोग कर सकते हैं।

<% options = options_from_collection_for_select(@list, 'id', 'name') %> 
<%= f.select :all_val, options %> 
+0

तो मैं' options_from_collection_for_select (@people, 'आईडी' का उपयोग करें, ' नाम ')' शून्य के लिए 'अपरिभाषित विधि' मानचित्र 'के रूप में त्रुटि प्राप्त करना: NilClass'। मैं क्या गलती कर रहा हूं – overflow

+0

मुझे लगता है कि '' 'लोगों का' शून्य है। आप अपने प्रश्न में '' '@ list''' का उपयोग कर रहे हैं। – mechanicalfish

+0

क्षमा करें कि प्रतिलिपि पेस्ट गलती है वास्तव में मुझे यह पसंद है <<= = options_from_collection_for_select (@list, 'id', 'name')%> 'लेकिन एक ही त्रुटि – overflow

2

काफी @learner ऊपर सूत्र में अपने प्रश्न का उत्तर देने के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन वहाँ एक अच्छा मौका है कि @overflow @list अपने नियंत्रक में परिभाषित नहीं किया है।

मेरे मामले को हल करने के मैं अपने "डीईएफ़ नया" विधि में (@restaurants इस मामले में) @list की मेरी बराबर डाल के बाद से मैं इसे उपयोग कर रहा था संबद्ध रेस्तरां के साथ नए आइटम बनाने में मदद करने।

# GET /specials/new 
    def new 
    @special = Special.new 
    @restaurants = Restaurant.all // Look Here 
    end 

साथ ही, : all_val मूल जवाब में पैरामीटर आप डेटाबेस के लिए में पास करना चाहते हैं होना चाहिए। मेरे मामले में यह था: restaurant_id

0

इस के लिए काम किया मुझे

# view 
<%= form.select(:list_id) do %> 
    <% @list.each do |l| -%> 
     <%= content_tag(:option, l.name, value: l.id) %> 
    <% end %> 
<% end %> 

और

# controller 
@list ||= List.all 

`

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