Ruby on Rails는 속성 변경 모델에 기능을 추가합니다
-
19-09-2019 - |
문제
레일 모델에는 고용자 _wcb라는 소수점이 있습니다. 고용주 _wcb가 변경되었을 때 더러운 비트가 True로 설정되면 원합니다. 고용주 _wcb setter 메소드를 무시하고 싶습니다. 그렇게하는 방법 (특히 메타 프로 그램 사용)?
해결책
실제로 Rails v2.1에서 이것은 레일로 구워졌습니다. 살펴보십시오 ActivereCord :: Dirty에 대한 문서. 요약해서 말하자면:
# Create a new Thing model instance;
# Dirty bit should be unset...
t = Thing.new
t.changed? # => false
t.employer_wcb_changed? # => false
# Now set the attribute and note the dirty bits.
t.employer_wcb = 0.525
t.changed? # => true
t.employer_wcb_changed? # => true
t.id_changed? # => false
# The dirty bit goes away when you save changes.
t.save
t.changed? # => false
t.employer_wcb_changed? # => false
다른 팁
레일의 더러운 비트 기능 (다른 이유로 무시하고 싶다고 말하면)을 사용하지 않으려면 별명 메소드를 사용할 수 없습니다 (위의 스티브 항목에 대한 내 의견을 참조하십시오). 그러나 슈퍼로 전화를 사용하여 작동 할 수 있습니다.
def employer_wcb=(val)
# Set the dirty bit to true
dirty = true
super val
end
이것은 잘 작동합니다.
제휴하지 않습니다 StackOverflow