UFO ET IT

언제 save !, create!를 사용합니까?

ufoet 2020. 12. 3. 21:09
반응형

언제 save !, create!를 사용합니까? 및 update_attributes! Rails에서?


나는 언제 쾅을 사용할지 알아 내려고 노력하고있다! 기록을 저장하고 업데이트하기위한 버전? 하나의 레코드를 저장하거나 단일 속성을 업데이트하는 경우, 아무것도 잘못되지 않는다고 확신하는 경우 또는 항상 컨트롤러 외부에서 사용하는 경우에는 필요하지 않다고 들었습니다. 나는 여러 가지가 저장되고 무언가가 실패하고 DB에 불완전한 데이터가 있다는 것에 대해 편집증이라고 생각합니다. 내가 작업중인 현재 Rails 프로젝트는 50 % 이상 완료되었으며 현재는 강타가 없습니다. 여러 레코드를 업데이트하거나 생성하는 모델에서 호출중인 사용자 지정 메서드가 있으며 어떤 종류의 트랜잭션에 있어야하는지 걱정합니다.

이것이 흩어져있는 것처럼 보이면 죄송하지만 ActiveRecord의 저장 기능을 올바르게 사용하는 방법을 찾고 결국 내 삶을 더 쉽고 스트레스가 덜하게 만드는 방법을 찾으려고 노력하고 있습니다. 시간 내 줘서 고마워.


일반적으로 컨트롤러에서 비뱅 버전을 사용하려고합니다. 이것은 다음과 같은 논리를 허용합니다.

def update
  @model = Model.find params[:id]
  if @model.update_attributes params[:model] #returns true of false
     # handle success
  else
     # handle failure
  end
end

나는 무언가가 검증되지 않고 저장되지 않았는지 확인하고 싶을 때 테스트에서 뱅 버전을 많이 사용하고 있음을 발견했습니다. 변경된 모델 유효성 검사로 인해 실패한 테스트를 디버깅하는 데 시간을 낭비했습니다. 뱅 버전을 사용하면 분명합니다.

예 :

it "should do something" do
   m = Model.create! :foo => 'bar' # will raise an error on validation failure             
   m.should do_something
end

데이터베이스에 유효하지 않은 데이터가 없다는 측면에서 ActiveRecord 유효성 검사 (예 :)로이를 처리 validates_presence_of :user_id하거나 validate모델에서 자체 메서드를 정의해야합니다 . ( http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html ) 이렇게하면 데이터가 유효하지 않은 경우 저장이 발생하지 않습니다. 당신이 정말로 편집증이라면 데이터베이스에 몇 가지 제약을 추가 할 수 있습니다. ActiveRecord::Migration마이그레이션에서 고유 인덱스 및 기타 데이터베이스 제약 조건을 설정하는 방법에 대한 문서를 확인하십시오 .

또한 내 경험상 가능할 때마다 사용자 정의 저장 또는 생성 방법을 사용하지 않기를 원합니다. ActiveRecord에 포함 된 기능을 다시 구현하면 결국 대가를 지불하게됩니다. http://matthewpaulmoore.com/post/5190436725/ruby-on-rails-code-quality-checklist 에는 이에 대해 더 많은 의견이 있습니다.


주요 차이점은 실패한 저장이 처리되는 방식입니다. ActiveRecord 클래스를 업데이트 할 때 !레코드가 유효하지 않으면 버전에서 예외가 발생합니다.

http://api.rubyonrails.org/classes/ActiveRecord/Base.html 에서 문서를 읽는 것이 좋습니다.

트랜잭션을 사용하는 것도 살펴볼 가치가 있습니다-http: //api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html


뭐 ! (방)의 수단 update_attributessave같습니다

"실패시 거짓 반환"이 아닌 "실패시 예외 발생"

https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update-21 https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save

뭐 ! (뱅) 의미 create:

"실패시 결과 개체 반환"대신 "실패시 예외 발생" https://api.rubyonrails.org/classes/ActiveRecord/Persistence/ClassMethods.html#method-i-create-21

참고 URL : https://stackoverflow.com/questions/1761076/when-do-i-use-save-create-and-update-attributes-in-rails

반응형