4

我在 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,但肯定还有另一种我忽略的方法?

4

1 回答 1

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
于 2012-04-04T11:51:22.263 回答