나는 Order
모델을 가지고 있습니다.레일 : 키를 생성하여 읽기 전용
임의로 생성 된 key
필드가 있어야합니다 (데이터베이스에 저장해야합니다).
키를 만든 후에는 키를 읽기 전용으로 사용해야합니다.
어떻게하면됩니까?
PS : 내가 after_initialize
에 @key 인스턴스 변수를 생성하지만 데이터베이스에 저장하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
나는 Order
모델을 가지고 있습니다.레일 : 키를 생성하여 읽기 전용
임의로 생성 된 key
필드가 있어야합니다 (데이터베이스에 저장해야합니다).
키를 만든 후에는 키를 읽기 전용으로 사용해야합니다.
어떻게하면됩니까?
PS : 내가 after_initialize
에 @key 인스턴스 변수를 생성하지만 데이터베이스에 저장하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
key
필드가 attr_reader이고 모델 필드의 데이터베이스 테이블에 키 필드를 추가하는 마이그레이션이 있어야합니다.
콜백과 ActiveRecord::Dirty을 사용하여 원하는대로 할 수 있습니다.
String과 같은 키와 같은 데이터베이스의 열을 만듭니다.
그런 다음 모델에 추가하십시오.
before_save :set_key_if_needed
def set_key_if_needed
if self.persisted?
self.errors.add(:key, 'key cannot be changed') if self.key.changed?
else
self.key = "Your key randomly generated"
end
end
(객체가 이미 데이터베이스에 저장되어있는 경우) 키가 변경된 경우 당신이 확인하고 만약 그렇다면 당신은 성공하기 위해 검증을 방지? 지속합니다. 그렇지 않으면 키를 생성하기 만하면됩니다.
before_create
콜백을 사용하여 키를 생성해야합니다. 다음,이 키 덮어 방지하기 key=
접근을 덮어 :
def key= value
raise "not allowed, you fool!"
end
인스턴스 변수는 데이터베이스의 데이터베이스 열로부터 생성 된 속성 만 저장되지 않는다. – Matzi