ruby-on-rails - 带空格的mongoid数组

标签 ruby-on-rails ruby-on-rails-3 mongodb mongoid

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

最佳答案

您可以覆盖角色编写器方法并对其进行压缩。

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

关于ruby-on-rails - 带空格的mongoid数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10009517/

相关文章:

ruby-on-rails - 处理来自远程真 Rails 的响应时出错

Mongodb:在 collection.aggregate() 期间忽略大型文档(BSON > 16 MB)

node.js - mongodb.connect不执行回调函数

ruby-on-rails - 路线不工作 ruby 和铁路

jquery - Ruby on Rails 实时搜索(过滤)

ruby-on-rails - 配置 WEBrick 以在 Rails 4 中使用 SSL

ruby-on-rails - 如何将link_to放在rails中的字符串中

使用 Gson 将 Java 日期转为 MongoDB 日期

ruby-on-rails - 工厂女孩不发起对象

ruby-on-rails - rails : Updating Nested attributes - undefined method `to_sym' for nil:NilClass