2010-12-13 21 views
8

मैं जानता हूँ कि रेल में कोई वास्तविक बराबर नहीं है, लेकिन के बराबर मेरे सवाल है ज्यादातर के बारे में सबसे अच्छा अभ्यास ...रेल Django के "विकल्प"

Django में, आप के एक सीमित सेट करने के लिए एक मॉडल के क्षेत्र को सीमित करना चाहते हैं विकल्प, आप कुछ इस तरह (अपने मॉडल में) करना होगा:

COLOR_CHOICES = (('B', 'Blue'), ('R', 'Red')) 
item_color = models.CharField(choices=COLOR_CHOICES) 

मेरी (मूल) रेल की समझ से, मैं कुछ इसी तरह, उदाहरण के लिए, जोड़ने के साथ काम कर रूपों में एक चयन टैग का उपयोग करके प्राप्त कर सकते हैं/उस मॉडल को संपादित करना ...

मेरा प्रश्न हालांकि है, यह कहां होगा "विकल्प" हैश घोषित करने के लिए उपयुक्त हो (फिर मैं अनुमान लगा रहा हूं कि एक हैश मुझे चाहिए?)। असल में मैं बस इसे किसी भी रूप में आसानी से पुनः उपयोग करने योग्य बनाना चाहता हूं जहां मुझे उन विकल्पों को पेश करने की आवश्यकता हो सकती है, और जब मॉडल स्तर पर सत्यापन करने की बात आती है।

कोई भी मदद/सुझावों की सराहना की जाएगी! कुछ सहायक में

class Coffee < ActiveRecord::Base 
    @@coffe_size = %w(small medium large) 

    validates_inclusion_of :size, :in => @@coffe_size, 
    :message => "%{value} is not a valid size" 

    def self.coffee_size_options 
     @@coffe_size.map{ |z| [z,z]} 
    end 
end 

और फिर:

class Coffee < ActiveRecord::Base 
    validates_inclusion_of :size, :in => %w(small medium large), 
    :message => "%{value} is not a valid size" 
end 

सहायक पैदा करने के लिए के रूप में, आप की तरह कुछ की कोशिश कर सकते हैं:

उत्तर

10

बातों का सत्यापन तरफ, शायद validates_inclusion_of तुम क्या जरूरत है:

<%= select(:coffee, :size, Coffee.coffee_size_options) %> 
0

2 साल बाद, बेहतर विकल्प है: value_for

class Car < ActiveRecord::Base 
    attr_accessible :brand 
    values_for :brand, :has=>[:ford, :chevy, :dodge], :add=>[:constants] 

    def doStuff 
    # Now you can... 
    Car.brands # [:ford, :chevy, :dodge] 
    Car::BRAND_FORD # "ford" 
    myCar = Car.new(:brand=>Car::BRAND_FORD) 
    myCar.valid? # true 
    myCar.brand= "duck." 
    myCar.valid? # false 
    end 
end 
+0

क्या आप इस विधि के लिए दस्तावेज़ से लिंक कर सकते हैं? यह बहुत अच्छा लग रहा है लेकिन मेरा google-fu मुझे असफल कर रहा है। – Eric

+2

ओह, मैं देखता हूं, यह एक मणि है, अंतर्निहित विधि नहीं है ... – Eric

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