2011-05-17 7 views
8

मेरे रेल 3 एप्लिकेशन में मेरे पास कई मॉडल हैं जिनमें कॉलम हैं जिनमें सीमित विकल्प हैं (आईई एक चयन बॉक्स)। इन मामलों में यह विकल्प चुनने के लिए एक और मॉडल और मूल मॉडल के साथ संबंध बनाने के लिए बहुत अधिक लगता है।रेल 3 में मुझे सीमित विकल्पों के साथ मॉडल कॉलम का प्रबंधन कैसे करना चाहिए

एक विकल्प जो मैं सोच सकता हूं कि सिर्फ एक चुनिंदा बॉक्स बनाना है और इसमें विकल्प हैं, लेकिन यह बहुत शुष्क नहीं लगता है। क्या किसी के पास इस स्थिति को संभालने का अच्छा सुझाव है?

देखने के लिए धन्यवाद।

उत्तर

13

तुम इतनी

# formatted as an array of options, option being an array of key, value 
OPTIONS = [['Email', 'email'], ['Text', 'text'], ['Email and Text', 'both']] 

validates_inclusion_of :field, :in => OPTIONS 

जो फिर एक चयन मेनू एक दृश्य में बहुत आसानी से उपयोग कर रहा formtastic

<%= f.input :field, :as => :select, :collection => Model::OPTIONS %> 
+0

मुझे सत्यापित करने का प्रयास करते समय "सूची में नहीं" त्रुटि मिल रही है। कोई विचार क्यों? मुझे 'विकल्प = [[' विकल्प 1 ', 1], [' विकल्प 2 ', 2] ...]' और 'फॉर्म है (@ ऑस्टिन टेलर का व्यू कोड,' f.select') का उपयोग करके '<विकल्प आउटपुट हो रहा है मूल्य = "1"> विकल्प 1 'जो मैं उम्मीद करता हूं। मैंने जांच की है कि यह ठीक से भेज रहा है - यह है। लेकिन यह कह रहा है कि मैंने जो मूल्य भेजा है वह उसकी सूची में नहीं है। कोई विचार क्यों? –

+3

आह आपको सरणी को केवल मानों में पतन करने की आवश्यकता होगी, जैसे 'OPTIONS.collect {| o | ओ [1]} ' – Jimmy

+1

वहाँ है! मुझे पता था कि ऐसा करने का एक तरीका होगा, लेकिन मुझे यह नहीं मिला। मैंने इसे एक हैश ('{0 =>" विकल्प 0 ", 1 =>" विकल्प 1 "...}') में बदल दिया, जिसका अर्थ है कि मैं अकेले 'विकल्प' छोड़ सकता हूं। धन्यवाद! –

7

उदाहरण पॉप्युलेट करने के लिए इस्तेमाल किया जा सकता की तरह अपने मॉडल में एक निरंतर बना सकते हैं मैं आमतौर पर मॉडल में निरंतर सूची के साथ ऐसा करता हूं।

class Model < ActiveRecord::Base 
    PROPERTY_OPTIONS = ['Option One', 'Option Two', ...] 
    validates_inclusion_of :property, :in => PROPERTY_OPTIONS 
end 

और ध्यान में रखते हुए:

<%= f.select :property, Model::PROPERTY_OPTIONS %> 
0

कुछ मामलों में, मैं सिर्फ विकल्पों में से एक हैश बना सकते हैं और प्रदर्शित करने और उन्हें स्थापित करने के लिए कक्षा के तरीके का प्रयोग करेंगे। उदाहरण के लिए, अलग-अलग स्थितियों के साथ एक समस्या मॉडल इतना की तरह किया जा सकता है:

def self.statuses 
    {:open => 1, :closed => 2} 
end 

तो फिर तुम सिर्फ मॉडल की status_id में पूर्णांक मान की दुकान। आप गेटर्स/सेटर्स को भी कॉन्फ़िगर कर सकते हैं।

1

तुम भी enum_column प्लगइन का उपयोग कर सकते हैं: https://github.com/electronick/enum_column

तब आप अपने विचारों में अपने चयन बॉक्स प्रदान कर सकते हैं इस प्रकार है:

<%= f.select :status, Model.columns_hash['status'].limit %> 
जैसे कि पुस्तक के रूप में

(कहाँ मॉडल एक उदाहरण मॉडल का नाम है, या उत्पाद, या जो भी आपका आवेदन है, वास्तव में इसके बारे में है।)

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