我在mongoid中使用一个数组来存储用户角色,它大部分工作正常,但我有一个问题,rails将一个空白传递给一个数组,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,但肯定还有另一种我忽视的方式吗?
答案 0 :(得分: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