2012-11-05 4 views
0

기본적으로 부울 열이 많은 편의 시설 모델이 있습니다.레일스 모델에서 허위 열 필터링

뷰에 트루 (True) 열을 표시하고자하므로 모델 수준에서 잘못된 열을 필터링하고 싶습니다.

내 초기 생각 :

# in model file 
def available 
    a = {} 
    self.attributes.each do |key, value| 
     if value 
     a[key] = value 
     end 
    end 
    a 
    end 

이 나에게 ID, created_at 및 modified_at 열을 제공하기 때문에이 완벽하지 않습니다.

나는 이것을 달성하는 더 좋은 방법이 있어야만한다고 생각합니다.

답변

0

@Deefour 제안을 사용 이걸로 끝났다 :

def available 
    a = {} 
    hidden = ["id","created_at","updated_id","business_id"] 
    self.attributes.each do |key, value| 
     a[key] = value if value.class == TrueClass 
     a[key] = value if [String].include? value.class and not value.empty? 
     a[key] = value if not hidden.include? key and value.class == Fixnum 
    end 
    a 
    end 
1

나는 self.attributes 이상의 반복이 좋은 아이디어라고 생각합니다. value을 좀 더 엄격하게 비 부울 열을 필터링하여 테스트 할 수 있습니다.

a[key] = value if [TrueClass, FalseClass].include? value.class 
관련 문제