DB 열에 대한 속성에 대한 레일 세터 및 getter를 구현할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1906702

  •  19-09-2019
  •  | 
  •  

문제

레일에서 우리는 제공된 속성 레일을 통해 DB 열에 액세스 할 수 있지만이를 변경할 수 있습니까? 예를 들어 이름 열이있는 DB가 있습니다.

def name
  "sir" + name
end

시도했지만 스택 오버플로가 발생합니다. 이것을 달성하는 방법이 있습니다.

더 많은 질문, 이름과 self.name의 차이가 있습니다.

도움이 되었습니까?

해결책

def name
  "sir" + read_attribute(:name)
end

그러나이 연습을 피하십시오. 대신 "가상 속성"이라고도하는 추가 getter/setter를 사용하십시오. 자세한 내용은이 답변을 읽으십시오. 레일로 속성을 장식합니다

귀하의 경우에는 이상한 부작용도 있습니다. 속성에 액세스 할 때마다 이름이 추가됩니다. 3 번의 전화를 한 후에는 끝납니다

"sir sir sir name"

실제로, 당신은 할 수 있습니다

def name
  n = read_attribute(:name)
  if /^sir/.match(name)
    n
  else
    "sir #{n}"
  end
end

그러나 진지하게, 이것을하지 마십시오.

다른 팁

가능한 합병증을 알고 있지만 여전히이를 수행 해야하는 경우 :

def name
  "sir" + self[:name]
end

사용 super

루비 우선적 인 방법

설명이 많지만 이미 정의 된 메소드를 호출하는 것만 큼 간단하다고 생각합니다.

def name
  "sir #{super}"
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top