문제

내 송장 모델에는 주소 _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 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top