2014-09-15 2 views
1

아래 코드를 사용하여 새 레코드를 만들거나 기존 레코드를 업데이트합니다. 만들기가 작동하며 업데이트가 아닙니다.레일 first_or_initialize 레코드를 업데이트하지 않습니다

Signup.find_or_initialize_by(email: "[email protected]") do |signup| 
    signup.name = "John Doe" 
    signup.save 
end 
#Signup.find(email: "[email protected]").name = nil 

save도 레코드를 업데이트하는 이유는 확실하지 않습니다. FWIW, 작동하지 않았던 차이점을 다른 구문으로 시도했지만 find_or_initialize 블록 버전을 유지하고 싶습니다.

signup = Signup.find_or_initialize_by(email: "[email protected]") 
signup.name = "John Doe" 
signup.save 
#Signup.find(email: "[email protected]").name = "John Doe" 

답변

3

블록은 데이터베이스에 일치하는 행이없는 경우에만 호출됩니다. 첫 번째 버전은 요청한 이메일 주소로 기존 행을 수정하지 않습니다.

그게 원한다면, 두 번째 예제는 갈 길입니다.

관련 문제