복붙노트

[RUBY-ON-RAILS] 레일 : update_attributes 대 update_attribute

RUBY-ON-RAILS

레일 : update_attributes 대 update_attribute

Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")

이 두 가지를 명시 적 갱신에 AR 말할 필요없이 객체를 업데이트합니다.

API는 말한다 레일 :

update_attribute에 대한

update_attributes에 대한

그래서 나는 update_attribute를 사용해야합니다 유효화된다 객체를하지 않으려면. 나는 before_save에이 업데이트가 있다면, 그것은 무엇을 유래한다?

내 질문은 저장하거나 검증하기 전에 바이 패스도 update_attribute 수행한다.

또한, ... update_attributes에 해시를 통과 상단에 내 예를 확인하기 위해 올바른 구문은 무엇인가.

해결법

  1. ==============================

    1.update_attribute를 참조하십시오. 클릭 쇼 소스에서 당신은 코드를 다음과 얻을 것이다

    update_attribute를 참조하십시오. 클릭 쇼 소스에서 당신은 코드를 다음과 얻을 것이다

          # File vendor/rails/activerecord/lib/active_record/base.rb, line 2614
    2614:       def update_attribute(name, value)
    2615:         send(name.to_s + '=', value)
    2616:         save(false)
    2617:       end
    

    지금 당신이 얻을의 코드를 update_attributes와보기를 참조

          # File vendor/rails/activerecord/lib/active_record/base.rb, line 2621
    2621:       def update_attributes(attributes)
    2622:         self.attributes = attributes
    2623:         save
    2624:       end
    

    둘 사이의 차이는 저장 update_attributes 사용하는 반면 (false)를 저장 update_attribute의 사용 또는 당신은 저장 (true)를 말할 수있다.

    죄송 긴 설명하지만 내가하고 싶은 말은 중요합니다. perform_validation 거짓이면 저장 (perform_validation 해당 =)는 (스킵 적절한 워드 것)에 저장과 관련된 모든 검증을 거치지.

    두 번째 질문에 대한

    귀하의 예 맞습니다.

    Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
    

    또는

    Object.update_attributes :field1 => "value", :field2 => "value2", :field3 => "value3"
    

    또는 해시 말의 PARAMS의 모든 필드 데이터 및 이름을 얻는 경우 [: 사용자] 여기 만 사용

    Object.update_attributes(params[:user])
    
  2. ==============================

    2.팁 : update_attribute은 a7f4b0a1 커밋을 통해 레일 4에서 사용되지 않습니다. 그것은 update_column 찬성 update_attribute 제거합니다.

    팁 : update_attribute은 a7f4b0a1 커밋을 통해 레일 4에서 사용되지 않습니다. 그것은 update_column 찬성 update_attribute 제거합니다.

  3. ==============================

    3.update_attribute

    update_attribute

    모델 기반의 유효성 검사를 호출하지 않고 개체의이 방법은 업데이트를 하나의 속성.

    obj = Model.find_by_id(params[:id])
    obj.update_attribute :language, “java”
    

    update_attributes

    또한이 방법은 업데이트를 여러 단일 개체의 속성과 모델 기반의 유효성 검사를 전달합니다.

    attributes = {:name => “BalaChandar”, :age => 23}
    obj = Model.find_by_id(params[:id])
    obj.update_attributes(attributes)
    

    액티브 레코드 어떤 방법을 사용할 때이 대답은 지울 바랍니다.

  4. ==============================

    4.주목할 가치가 update_attribute으로 업데이트 할 원하는 속성 만 attr_accessible 지정된 속성을 업데이트합니다 대량 할당 방법 update_attributes에 반대를 업데이트 할 attr_accessible 나열 화이트 할 필요가 없다는 것입니다.

    주목할 가치가 update_attribute으로 업데이트 할 원하는 속성 만 attr_accessible 지정된 속성을 업데이트합니다 대량 할당 방법 update_attributes에 반대를 업데이트 할 attr_accessible 나열 화이트 할 필요가 없다는 것입니다.

  5. ==============================

    5.update_attribute 단순히 모델의 하나의 속성을 업데이트하지만 우리는 update_attributes 방법에 여러 속성을 전달할 수 있습니다.

    update_attribute 단순히 모델의 하나의 속성을 업데이트하지만 우리는 update_attributes 방법에 여러 속성을 전달할 수 있습니다.

    예:

    user = User.last
    
    #update_attribute
    user.update_attribute(:status, "active")
    

    그것은 확인을 통과

    #update_attributes
    user.update_attributes(first_name: 'update name', status: "active")
    

    유효성 검사가 실패 할 경우는 업데이트되지 않습니다.

  6. ==============================

    6.큰 응답. 통지 그 루비 1.9에 대한 당신이 수 (그리고 내가해야한다고 생각) update_attributes에 대한 새로운 해시 구문을 사용 위와 :

    큰 응답. 통지 그 루비 1.9에 대한 당신이 수 (그리고 내가해야한다고 생각) update_attributes에 대한 새로운 해시 구문을 사용 위와 :

    Model.update_attributes(column1: "data", column2: "data")
    
  7. ==============================

    7.당신이 속성 또는 업데이트 기록을 할당 할 수있는 모든 가능한 방법에 관한이 블로그 게시물을 방문에 관심이있을 수 update_attribute, 업데이트 update_column, update_columns 등 http://www.davidverhasselt.com/set-attributes- (레일에 4 업데이트) 의 - 액티브 /. 예를 들어 그러한 검증, 터치 객체의 updated_at 콜백을 실행하는 트리거와 같은 측면에서 다르다.

    당신이 속성 또는 업데이트 기록을 할당 할 수있는 모든 가능한 방법에 관한이 블로그 게시물을 방문에 관심이있을 수 update_attribute, 업데이트 update_column, update_columns 등 http://www.davidverhasselt.com/set-attributes- (레일에 4 업데이트) 의 - 액티브 /. 예를 들어 그러한 검증, 터치 객체의 updated_at 콜백을 실행하는 트리거와 같은 측면에서 다르다.

    영업 이익의 질문 update_attribute에 대한 답변으로 패스 콜백으로하지 않습니다.

  8. ==============================

    8.update_attribute 및 update_attributes은 유사하지만, 하나 개의 큰 차이 : update_attribute는 유효성 검사를 실행하지 않습니다.

    update_attribute 및 update_attributes은 유사하지만, 하나 개의 큰 차이 : update_attribute는 유효성 검사를 실행하지 않습니다.

    또한:

    이 두 가지 방법은 유사한 이름과 작품을 부여 혼동 정말 쉽습니다. 따라서, update_attribute는 update_column에 찬성 제거되고있다.

    이제 Rails4 당신이 Model.update_column 사용할 수 있습니다 Model.update_attribute의 장소에서 (COLUMN_NAME, COLUMN_VALUE을 () : COLUMN_NAME, COLUMN_VALUE)

    update_column에 대한 자세한 정보를 얻을하려면 여기를 클릭하십시오.

  9. ==============================

    9.귀하의 질문에 대답하기 위해, update_attribute 건너 뜀은 "검증"저장 사전하지만 당신이 정말로 원하는 경우 여전히 "단지 열을 업데이트하고 AR의 cruft에 건너"당신이 사용할 필요가 다음을에 after_save 등과 같이 다른 콜백을 실행 (분명히)

    귀하의 질문에 대답하기 위해, update_attribute 건너 뜀은 "검증"저장 사전하지만 당신이 정말로 원하는 경우 여전히 "단지 열을 업데이트하고 AR의 cruft에 건너"당신이 사용할 필요가 다음을에 after_save 등과 같이 다른 콜백을 실행 (분명히)

    Model.update_all (...)를 참조하십시오 https://stackoverflow.com/a/7243777/32453

  10. ==============================

    10.최근에 나는 혼란, update_attribute 대 update_attributes 및 검증 문제에 너무 비슷한 이름 때문에 다른 동작을 실행했습니다.

    최근에 나는 혼란, update_attribute 대 update_attributes 및 검증 문제에 너무 비슷한 이름 때문에 다른 동작을 실행했습니다.

    update_attribute과 당신이 할 수있는 바이 패스 검증에 해시를 전달하기 위해 :

    object = Object.new
    object.attributes = {
      field1: 'value',
      field2: 'value2',
      field3: 'value3'
    }
    object.save!(validate: false)
    
  11. ==============================

    11.나는 before_save에 update_attribute를 갖는와 무한 루프 (before_save 콜백에서 update_attribute 통화로, 원래 update_attribute 호출에 의해 트리거) 이어질 것입니다 경우 귀하의 질문에 생각

    나는 before_save에 update_attribute를 갖는와 무한 루프 (before_save 콜백에서 update_attribute 통화로, 원래 update_attribute 호출에 의해 트리거) 이어질 것입니다 경우 귀하의 질문에 생각

    나는 확신 실제로 레코드를 저장하지 않기 때문에 그것은 before_save 콜백 무시하지 해요. 또한 사용하여 검증을 트리거하지 않고 기록을 저장할 수 있습니다

    Model.save 거짓

  12. from https://stackoverflow.com/questions/2778522/rails-update-attribute-vs-update-attributes by cc-by-sa and MIT license