2013-06-13 2 views
0

나는 Order 모델을 가지고 있습니다.레일 : 키를 생성하여 읽기 전용

임의로 생성 된 key 필드가 있어야합니다 (데이터베이스에 저장해야합니다).

키를 만든 후에는 키를 읽기 전용으로 사용해야합니다.

어떻게하면됩니까?

PS : 내가 after_initialize에 @key 인스턴스 변수를 생성하지만 데이터베이스에 저장하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+1

인스턴스 변수는 데이터베이스의 데이터베이스 열로부터 생성 된 속성 만 저장되지 않는다. – Matzi

답변

1

key 필드가 attr_reader이고 모델 필드의 데이터베이스 테이블에 키 필드를 추가하는 마이그레이션이 있어야합니다.

0

콜백과 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 

(객체가 이미 데이터베이스에 저장되어있는 경우) 키가 변경된 경우 당신이 확인하고 만약 그렇다면 당신은 성공하기 위해 검증을 방지? 지속합니다. 그렇지 않으면 키를 생성하기 만하면됩니다.

0

before_create 콜백을 사용하여 키를 생성해야합니다. 다음,이 키 덮어 방지하기 key= 접근을 덮어 :

def key= value 
    raise "not allowed, you fool!" 
end