2011-01-06 2 views
10

ActiveRecord 객체의 모든 속성 (id, created_at, updated_at 제외)을 nil로 설정하는 가장 쉬운 방법은 무엇입니까?ActiveRecord 객체의 모든 속성 (id, created_at, updated_at 제외)을 nil로 설정하는 가장 쉬운 방법은 무엇입니까?

+1

정직하게 말하면 이것은 매우 특별한 경우 인 것 같습니다. 왜 이것이 필요한지 조금 설명 할 수 있습니까? 아마도 더 나은 해결책이있을 것입니다. 그동안 내 대답을 확인해보십시오. – lwe

+0

그래, 조금 이상하다는 걸 알지만 꼭 필요하다고 믿어. 귀하의 답변 주셔서 감사합니다. – ben

+0

환영합니다 :) – lwe

답변

5

를 참조

class Model < AR::Base 
    def nilify_attributes!(except = nil) 
    except ||= %w{id created_at updated_at} 
    attribute_names.reject { |attr| except.include?(attr) }.each { |attr| self[attr] = nil } 
    end 
end 

을, 당신은 할 수 이 컨트롤러에서 :

@record.update_attributes(Hash[*@record.attributes.except('created_at','updated_at','id').map { |a| [a.first, nil] }.flatten]) 
2

나는 이미 이것을 알고있다. 나는 또 다른 해결책을 제기 한 같은 상황을 보았습니다.

record.dup.attributes.keep_if{|k,v| !v.nil?} 

여기서 record는 활성 레코드 개체입니다.

+0

이것은 나를 위해 일했으며 레일즈 4.2를 사용하고 있습니다. 하나의 라이너가 좋습니다. – onebree

관련 문제