2012-11-21 4 views
5

MySQL에서는 COALESCE을 사용하여 테이블의 emtpy 값만 업데이트 할 수 있습니다.레일즈 (ActiveRecord) 병합 또는 테이블의 빈 값만 업데이트하는 방법

Rails (ActiveRecord)로 어떻게 할 수 있습니까?

테이블의 각 열에 대해 if 문을 생성하고 싶지 않으며 update_attributes 메서드에 ActiveRecord 해시를 전달할 경우이를 수행 할 방법이 있어야합니다.

감사합니다.

+0

..... – Meltemi

답변

-2

그것은 당신이 요구하는지 분명 아니지만 내가 제대로 이해한다면,이 같은 싶지 :

class Address < ActiveRecord::Base 
    attr_accessible :street, :city, :zip 
    def update_null_attributes(hash) 
    update_attributes(hash.keep_if { |k,v| __send__("#{v}_was").nil? }) 
    end 
end 

이 업데이트하고 있었다 단지 사람들을 전달하려는 속성의 해시를 취할 것 원래 nil. "# {v} _was"메서드에 대해 ActiveModel::Dirty을 사용합니다.

+1

누구든지이 대답을 싫어하는 사람이라면 누구와 공유하고 싶은가요? 내가 잘못한 것이 없다면 대답을 향상시킬 수 없다. –

+0

이것은 원자가 아니기 때문에 가장 가능성이 낮습니다. 두 자원이 한 번에 같은 레코드를 읽으면 첫 번째 쓰기를 잃게됩니다. 레코드를 잠글 필요가 있습니다. – zach