복붙노트

[REDIS] 옴 / 레디 스에서 동적 필드를 설정

REDIS

옴 / 레디 스에서 동적 필드를 설정

어떻게이 옴 개체에 대해 동적으로 필드를 설정합니까?

class OhmObj < Ohm::Model
  attribute :foo
  attribute :bar
  attribute :baz

  def add att, val
    self[att] = val
  end
end

class OtherObj

  def initialize
    @ohm_obj = OhmObj.create
  end

  def set att, val
    @ohm_obj[att] = val #doesn't work
    @ohm_obj.add(att, val) #doesn't work
  end 
end

해결법

  1. ==============================

    1.명명 된 속성에 대한 접근 옴 :: 모델을 정의 및 뮤 테이터 방법에서 속성 클래스 방법 :

    명명 된 속성에 대한 접근 옴 :: 모델을 정의 및 뮤 테이터 방법에서 속성 클래스 방법 :

    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
    

    당신이 속성 말할 때 이렇게 : foo는, 당신은 무료로 이러한 방법을 얻을 :

    def foo         # Returns the value of foo.
    def foo=(value) # Assigns a value to foo.
    

    이 같은 mutator 메소드를 호출 전송을 사용할 수 있습니다 :

    @ohm_obj.send((att + '=').to_sym, val)
    

    당신이 정말로 @ohm_obj 말하고 싶은 경우 [AT & T는] 발은 당신이 당신의 OhmObj 클래스에 다음과 같이 뭔가를 추가 할 수 =

    def []=(att, value)
        send((att + '=').to_sym, val)
    end
    

    그리고 당신은 아마 잘 대칭을 유지하기로 접근 버전을 원하는 것 :

    def [](att)
        send(att.to_sym)
    end
    
  2. ==============================

    2.[] []를 동적 속성 = 접근로 및 테이터는 0.2 옴의 옴 : 기본 모델에 의해 정의된다.

    [] []를 동적 속성 = 접근로 및 테이터는 0.2 옴의 옴 : 기본 모델에 의해 정의된다.

  3. from https://stackoverflow.com/questions/6638375/setting-a-dynamic-field-in-ohm-redis by cc-by-sa and MIT license