2016-11-04 3 views
0

정규화 된 데이터베이스 스키마를 갖도록 시스템을 업데이트하고 있습니다. 현재 테이블에 사용자 이름을 텍스트로 저장하는 user 열이 있습니다. user_id 열과 users 테이블을 추가하고 some_build.user 사용자 모델을 반환하고 싶습니다. 지금까지 꽤 똑바로.열을 같은 이름의 다른 것으로 바꾸지 만 계속 채우십시오.

불행히도,이 코드베이스의 테스트는 당신이 바라는 것보다 철저하지 않습니다. 변경 사항을 되돌려야 할 경우 이전 user 열을 채우고 싶습니다. 나는 build.rb이 퍼팅 시도 : Build#userUser 모델에서 지적 떠나있는 동안 나는, 그것은 user 열을 작성합니다 기대했다

alias_attribute :legacy_username, :user 
before_save do 
    if changed_attributes.keys.include? 'user_id' 
    legacy_username = user.name 
    end 
end 

. 죄송 합니다만 legacy_usernameuser 열이 아니라 user 열 대신에 user 메서드의 별칭이됩니다. 즉 some_build.legacy_usernameUser을 반환하며 before_save 후크는 실패합니다.

user라고하는 모든 것을 유지하면서이 작업을 수행 할 수있는 방법이 있습니까? 이름을 바꿔야합니까?

답변

0

아하! 직접 ActiveRecord::Base#[]=를 사용하여 데이터베이스 값을 설정할 수 있습니다 밝혀 :

before_save do 
    if changed-attributes.keys.include? 'user_id' 
    self[:user] = username 
    end 
end 

필요 없음 별칭.

관련 문제