attribute
Ohm::Model
. से क्लास मेथड नामित विशेषता के लिए एक्सेसर और म्यूटेटर विधियों को परिभाषित करता है:
def self.attribute(name)
define_method(name) do
read_local(name)
end
define_method(:"#{name}=") do |value|
write_local(name, value)
end
attributes << name unless attributes.include?(name)
end
तो जब आप कहते हैं attribute :foo
, आपको ये तरीके मुफ्त में मिलते हैं:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
आप send
. का उपयोग कर सकते हैं म्यूटेटर विधि को इस तरह कॉल करने के लिए:
@ohm_obj.send((att + '=').to_sym, val)
अगर आप वाकई @ohm_obj[att] = val
. कहना चाहते हैं तो आप अपने OhmObj
. में निम्न जैसा कुछ जोड़ सकते हैं कक्षा:
def []=(att, value)
send((att + '=').to_sym, val)
end
और आप शायद चाहते हैं कि एक्सेसर संस्करण भी समरूपता बनाए रखे:
def [](att)
send(att.to_sym)
end