DB 열에 대한 속성에 대한 레일 세터 및 getter를 구현할 수 있습니까?
-
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
제휴하지 않습니다 StackOverflow