2012-04-04 31 views
4

我在mongoid中使用一個數組來存儲用戶角色,它大多數工作正常,但我有問題與導軌傳遞給數組和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和刪除尼爾斯,但肯定有我俯瞰另一種方式?

回答

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 2012-04-04 12:07:21