>

액티브 레코드 find 의 결과 업데이트  변수에 변수를 할당하면 예상대로 작동합니다.

user = User.find(1790)
user.archived          # => true
user.archived = false
user.save              # => true
user.archived          # => false

find 의 결과를 업데이트 할 수없는 이유  직접?

User.find(1790).archived          # => true
User.find(1790).archived = false
User.find(1790).save              # => true
User.find(1790).archived          # => true

  • 답변 # 1

    매번 당신이 find , 새로운 User 인스턴스를 얻습니다.   users 의 현재 값을 기반으로  표. 당신이 User.find(1790).saveUser  인스턴스에 더 이상 .archived = false 가 없습니다   User.find 를 수행하여 데이터베이스에서 레코드를 검색했기 때문에 archived = true 가있는) .

    시도 :

    User.find(1790).archived          # => true
    User.find(1790).archived = false
    User.find(1790).changed?          # => false
    User.find(1790).save              # => true
    User.find(1790).archived          # => true
    
    

    그러나 할 때 어떤 일이 일어나는지보십시오 :

    User.find(1790).archived                # => true
    User.find(1790).update(archived: false) # => true
    User.find(1790).archived                # => false
    
    

  • 답변 # 2

    User.find(1790)  -메소드 이름에서 알 수 있듯이 finds record matching given conditions . 쿼리를 실행하고 매번 레코드를 가져옵니다. 따라서이 명령문의 설정 값은 set locally 이므로 반영되지 않습니다.  그 진술에 대해서만. 다시 User.find(1790).save 에 전화하면  이전에 설정 한 값이 유지되지 않고 찾기 쿼리가 다시 실행됩니다.

    결과를 ​​변수에 할당 할 때 변수 값을 수정하고 저장하면 활성 레코드가 업데이트됩니다.

관련 자료

  • 이전 bash - 줄이 공백으로 가득 차면 파일의 줄 [A ~ Z]에서 첫 번째 문자를 어떻게 찾을 수 있습니까?
  • 다음 Java에서 가변 문자열과 불변 문자열의 차이점은 무엇입니까?