Rails에서 데이터 업데이트 시 유효성 검증(Validation)을 무시하고 저장하려면 `update` 대신 **`update_column`** 또는 `update_columns` 메서드를 사용하면 됩니다.
1. `update_column`
`update_column`은 단일 속성에 대해 유효성 검증 없이 데이터를 업데이트합니다.
user = User.find(1)
user.update_column(:name, "New Name")
- 특징:
- 유효성 검증이 무시됩니다.
- 콜백(before_save, after_save 등)이 실행되지 않습니다.
- `updated_at` 타임스탬프는 자동으로 업데이트됩니다.
---
2. `update_columns`
`update_columns`는 여러 속성을 유효성 검증 없이 한 번에 업데이트합니다.
user = User.find(1)
user.update_columns(name: "New Name", email: "new_email@example.com")
- 특징:
- 유효성 검증과 콜백이 무시됩니다.
- `updated_at`도 자동으로 업데이트되지 않습니다. 필요하면 명시적으로 포함해야 합니다:
user.update_columns(name: "New Name", updated_at: Time.current)
---
3. SQL 쿼리 사용
`ActiveRecord::Base.connection`을 통해 직접 SQL을 실행할 수도 있습니다.
ActiveRecord::Base.connection.execute("UPDATE users SET name = 'New Name' WHERE id = 1")
- 주의:
- 데이터 무결성을 유지하기 위해 SQL 직접 실행은 최소화하는 것이 좋습니다.
---
4. `save(validate: false)`
`save` 메서드에서 `validate: false` 옵션을 사용하면 검증을 무시하고 객체를 저장할 수 있습니다.
user = User.find(1)
user.name = "New Name"
user.save(validate: false)
- 특징:
- 콜백은 실행됩니다.
- 유효성 검증만 무시됩니다.
---
요약
- **유효성 검증만 무시**: `save(validate: false)`
- **유효성 검증과 콜백 무시**: `update_column`, `update_columns`
- **SQL 직접 실행**: `ActiveRecord::Base.connection.execute`
필요에 따라 적합한 방법을 선택하세요. 단, 데이터 무결성을 유지하기 위해 유효성 검증을 무시하는 작업은 신중히 사용해야 합니다.