2012-11-26 2 views
3

update_attributes과 비슷한 메서드가 내장되어있어 매개 변수로 전달 된 해시의 잘못된 키를 무시합니까? 그렇지 않은 경우 유효한 키가 포함되어 있거나 포함되어 있지 않은 해시가 전송 된 상황을 처리하는 가장 좋은 방법은 무엇입니까?잘못된 키를 무시하기위한 update_attributes

+1

, 당신은 의미합니까 "모델의 기존 속성을 나타내는 기호 (정의되지 않은 메소드를 생성하지 않음)"또는 "유효성 검사를 통과하는 키 => 값 쌍"? 의 기존 속성을 나타내는 "기호 : – pje

+0

"모델의 기존 속성 (정의되지 않은 메서드를 제기하지 않을 것이다) 나타내는 상징 " 모델 (정의되지 않은 메서드를 발생시키지 않습니다) "나는 OxSina가 모델의 특성이 아닌 매개 변수를 삭제하는 방법을 찾고 있다고 생각합니다. @OxSina가 맞습니까? – 0xSina

+0

이 0xSina @ – MrYoshiji

답변

1

레일스에서이 기능을 수행하는 것에 대해서는 전혀 알지 못합니다. 나는 또한 모델이 "정의 된 속성"이 무엇인지를 결정하는 간단한 방법을 알고 있지 않다. 왜냐하면 모델은 설정자, 가상 속성 등을 오버 라이딩 할 수 있기 때문이다.이 기능이 필요할 때마다, 수업 시간에 허용 기호 목록, 이런 식으로 뭔가 : 필터링 단계의 어떤 종류에서 나중에 사용 후

class Foo < ActiveRecord::Base 
    def defined_attributes 
    [ :a, :b, :c ] 
    end 
end 

... 그리고 "유효한 키"으로

attrs = { :a => 1, :z => 0 } 
    foo.update_attributes(attrs.slice(*foo.defined_attributes)) 
1

하나의 옵션으로 obj.valid가 실행 중입니까? update_attributes를 호출하기 전에 잘못된 키 (obj.errors 배열의 키)를 제거하십시오.

def update_valid_attributes(o) 
    o.errors.messages.each do {|k,msg| o.delete k} if !o.valid? 
    o.update_attributes 
end 

모든 지속 된 엔터티에 원할 경우이 방법을 ActiveRecord :: Base에 추가 할 수도 있습니다.

+0

"유효한 키를 "귀하의 질문에 맞는 경우 답변을 받아 들여야 – MrYoshiji

+0

@OxSina 그 경우 MrYoshi의 해결책을 생각해보십시오. – buftlica

관련 문제