문제
내 송장 모델에는 주소 _id 속성이 있으며이 address_id가 영원히 변경되기를 원하지 않습니다. 그래서 나는 이것이 수업 밖에서 일어나기를 원하지 않습니다.
invoice.address_id = 1
invoice.address = some_address
Rails는 송장 테이블의 모델 에이 address_id 속성을 자동으로 추가 하므로이 속성을 비공개/보호 된 방법을 어떻게 선언 할 수 있습니까? 부름
attr_protected :address_id
문서에 따라 대량 할당을 방지하기 때문에 해결책이 될 가능성이 높습니다.
감사!
해결책
당신은 원합니다 attr_readonly
.
다른 팁
하나의 라이너만큼 예쁘지는 않지만 아래 코드는 작동해야합니다 (그리고 항상 '불변성'방법을 작성하기 위해 항상 메타 프로 그램을 수행 할 수 있습니다).
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end
제휴하지 않습니다 StackOverflow