2014-10-06 2 views
0

모델 인스턴스의 모든 속성에 대한 값을 인코딩하려고합니다. Rails 3는 이와 비슷한 것을 지원합니까? 예 :레일 3 - 모델 인스턴스에있는 모든 속성 업데이트 (모든 값 인코딩)

class Book 
    attr_accessor :title, :author, :description 
end 

기본적으로 title, author 및 description의 속성 값은 UTF-8로 인코딩됩니다. 대신 모든 속성 값을 업데이트하고 ISO로 인코딩하려고합니다. 모델에 50 개 이상의 애트리뷰트가있을 수 있으며 각 애트리뷰트를 개별적으로 호출하는 것은 불가능합니다. 한 번에 모든 속성을 업데이트하는 것이 좋습니다.

다음은 내가하려고하는 것에 대한 의사 코드입니다. Rails 3에서 이와 같은 것이 가능합니까?

Book.find(1).update_all_attributes(&:encode("ISO-8859-1")) 

업데이트 나는 위의 코드 라인이 실패 할 것이라는 점을 알고있다. 그것은 내가 달성하려고하는 것을 의사 소통하는 데 도움이되는 의사 코드 일뿐입니다.

+0

우선 예상되는 코드는 구문 오류를 발생시킵니다. – sawa

+0

그래, 내가하려는 일을 의사 소통하는 데 도움이되는 의사 코드 일 뿐이야. – Smooth

+0

의사 코드로도 말도 안돼. – sawa

답변

2
class Book < ActiveRecord::Base 
    before_save :recode_attribs 

    private 

    def recode_attribs 
    attributes.each do |name, value| 
     next unless value.respond_to?(:encode) 
     attributes[name] = value.encode('ISO-8859-1') 
    end 
    end 
end 
+0

UI를 통해 사용자가 인코딩을 선택하기 만하면 인코딩해야합니까? 이것을 비공개 방식으로 만들고 모델 인스턴스를 저장하기 전에 컨트롤러에서 호출하는 것은 위험할까요? – Smooth

+0

@Smooth, 위험하지 않은 것 같습니다. 'before_save'는 레코드를 저장할 수있는 곳이 여러 개인 경우에 유용합니다. – Mori

+0

감사합니다. @mori !!! – Smooth