2014-06-30 3 views
2

일부 속성은 공개 (사용자가 편집 가능)이고 일부는 비공개 (소금 등) 인 사용자 모델이 있습니다. 모델의 모든 공개 속성을 반복합니다.

모델은 N 많은 공공 특성 (예를 들어 confirmation_token 소금) (이메일 및 성 예를 들어)와 M 개인 속성

내가하고 싶은 원하는 있다고 가정은

user.attrs.each |name, value| do 
    something(name, value) 
end 

같은 것입니다 어떻게 든 attr_accessor를 사용할 수 있습니까?

레일 4.0.2 및 루비 2.0.0 사용

아이디어가 있으십니까? 건배

+0

우리에게 당신의 모델을 보여주세요. –

+0

Ruby 객체는 공개 속성을 갖고 있지 않습니다. 이런 이유로, 이것은 해결하기에 상당히 어려운 문제입니다. 레일스의 경우 ActiveRecord 모델과 관련된 데이터베이스 열을 반복 할 수 있습니다 ... – Ajedi32

답변

2

아마도 허용 된 속성보다 많은 허용 된 특성이 있으므로 보호 된 특성 이름의 배열을 만들고 특성을 반복 할 때 해당 특성의 이름을 무시합니다.

protected_attributes = %w(password salt confirmation_token) 

user.attributes.each do |name, value| 
    unless protected_attributes.include?(name) 
    something(name, value) 
    end 
end 
+0

완벽하게, 이것이 내가 찾고있는 것입니다! –

관련 문제