2012-04-04 3 views
4

나는 사용자의 역할을 저장하기 위해 몽고 이드 (mongoid)의 배열을 사용하고 있으며 대부분 잘 작동하지만 배열에 공백으로 전달하는 레일에 문제가있어 몽고 (mongoid)가 저장합니다.블랭크가있는 몽고 이드 배열

["", "admin", "editor", "author"] 

Formtastic은 자동으로 다른 문제를 피하기 위해 무엇을해야합니까? 그러나 문제는 몽고이 (mongoid)가 빈칸을 배열에 저장한다는 것입니다. 공란을 무시하도록 어떻게 말할 수 있습니까?

<input id="user_roles_none" name="user[roles][]" type="hidden" value="" /> 

코드 :

field :roles, :type => Array, :default => ["author"] 

    ##USER ROLES 

    ROLES = %w[admin editor author] 

    class << self 
    def with_role(*args) 
     any_in(:roles => args) 
    end 
    end 

내가 콜백 before_save을하고 NILS를 제거 할 수 있습니다 확신 해요,하지만 확실히 내가 내려다 보이는 해요 다른 방법이?

답변

4

역할 작성기 메서드를 재정의하고 해당 작성기 메서드를 압축 할 수 있습니다.

def roles=(values) 
    write_attribute(:roles, values.map{|v| v.blank? ? nil : v}.compact) 
end 

[편집] : 처럼이 Mik_Die에 의해 코멘트에 대해 설명합니다. 다음과 같이 할 수 있습니다 :

def roles=(values) 
    write_attribute(:roles, values.reject(&:blank?) 
end 
+3

또는 간단한'write_attribute (: roles, values.reject (& : blank?))' – MikDiet